diff --git a/CHANGELOG.md b/CHANGELOG.md index d8935596a..25e410b95 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ Changelog All notable changes to this project will be documented in this file. Project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +6.10.0 +------ + +* [Core] Fixed stackframes in some situations being in inverse order. + 6.9.0 (2018-05-30) ------------------ * [Core] Switched from culprit to transaction for automatic transaction reporting. diff --git a/raven/utils/stacks.py b/raven/utils/stacks.py index c87a64c00..487eae329 100644 --- a/raven/utils/stacks.py +++ b/raven/utils/stacks.py @@ -134,7 +134,7 @@ def iter_stack_frames(frames=None): if not frames: frames = inspect.stack()[1:] - for frame, lineno in ((f[0], f[2]) for f in frames): + for frame, lineno in ((f[0], f[2]) for f in reversed(frames)): f_locals = getattr(frame, 'f_locals', {}) if not _getitem_from_frame(f_locals, '__traceback_hide__'): yield frame, lineno diff --git a/tests/base/tests.py b/tests/base/tests.py index 5644db03d..df032783e 100644 --- a/tests/base/tests.py +++ b/tests/base/tests.py @@ -491,7 +491,7 @@ def bar(): self.assertEquals(event['message'], 'test') assert 'stacktrace' in event self.assertEquals(len(frames), len(event['stacktrace']['frames'])) - for frame, frame_i in zip(frames, event['stacktrace']['frames']): + for frame, frame_i in zip(frames[::-1], event['stacktrace']['frames']): self.assertEquals(frame[0].f_code.co_filename, frame_i['abs_path']) self.assertEquals(frame[0].f_code.co_name, frame_i['function']) diff --git a/tests/handlers/logging/tests.py b/tests/handlers/logging/tests.py index 7f24f787c..f29102193 100644 --- a/tests/handlers/logging/tests.py +++ b/tests/handlers/logging/tests.py @@ -171,7 +171,7 @@ def test_record_stack(self): self.assertTrue('stacktrace' in event) frames = event['stacktrace']['frames'] self.assertNotEquals(len(frames), 1) - frame = frames[0] + frame = frames[-1] self.assertEqual(frame['module'], 'raven.handlers.logging') assert 'exception' not in event self.assertTrue('sentry.interfaces.Message' in event)