Skip to content
This repository was archived by the owner on Oct 23, 2023. It is now read-only.
This repository was archived by the owner on Oct 23, 2023. It is now read-only.

varmap can cause crashes in multithreaded programs #1343

@amol-

Description

@amol-

As varmap uses iteritems:

for k, v in iteritems(var))

It can lead to crashes under multithreaded programs that might modify the dictionary variables concurrently while a message is being reported.

File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/base.py", line 799, in captureMessage
  return self.capture('raven.events.Message', message=message, **kwargs)
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/base.py", line 641, in capture
  **kwargs)
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/base.py", line 476, in build_msg
  data.update(processor.process(data))
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/processors.py", line 39, in process
  data['extra'] = self.filter_extra(data['extra'])
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/processors.py", line 135, in filter_extra
  return varmap(self.sanitize, data)
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 52, in varmap
  for k, v in iteritems(var))
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 52, in <genexpr>
  for k, v in iteritems(var))
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 47, in varmap
  ret = [varmap(func, f, context, name) for f in var]
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 52, in varmap
  for k, v in iteritems(var))
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 52, in <genexpr>
  for k, v in iteritems(var))
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 52, in varmap
  for k, v in iteritems(var))
File "/var/lib/crunch.io/venv/lib/python2.7/site-packages/raven/utils/__init__.py", line 51, in <genexpr>
  ret = dict((k, varmap(func, v, context, k))
RuntimeError: dictionary changed size during iteration

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions