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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions