Browse Source

fix(grouping): Treat in_app=None as in_app=False (#38732)

A customer noticed that the stack trace rule matcher `app:no` was not
picked up for frames that did not have `in_app` set. This PR fixes the
behavior by falling back to `in_app = False`.
Joris Bayer 2 years ago
parent
commit
afd8d75605
2 changed files with 14 additions and 1 deletions
  1. 1 1
      src/sentry/grouping/enhancer/matchers.py
  2. 13 0
      tests/sentry/grouping/test_enhancer.py

+ 1 - 1
src/sentry/grouping/enhancer/matchers.py

@@ -64,7 +64,7 @@ def create_match_frame(frame_data: dict, platform: Optional[str]) -> dict:
         category=get_path(frame_data, "data", "category"),
         family=get_behavior_family_for_platform(frame_data.get("platform") or platform),
         function=_get_function_name(frame_data, platform),
-        in_app=frame_data.get("in_app"),
+        in_app=frame_data.get("in_app") or False,
         module=get_path(frame_data, "module"),
         package=frame_data.get("package"),
         path=frame_data.get("abs_path") or frame_data.get("filename"),

+ 13 - 0
tests/sentry/grouping/test_enhancer.py

@@ -412,3 +412,16 @@ def test_sentinel_and_prefix(action, type):
     actions[0][1].update_frame_components_contributions([component], frames, 0)
     expected = action == "+"
     assert getattr(component, f"is_{type}_frame") is expected
+
+
+@pytest.mark.parametrize(
+    "frame",
+    [
+        {"function": "foo"},
+        {"function": "foo", "in_app": False},
+    ],
+)
+def test_app_no_matches(frame):
+    enhancements = Enhancements.from_config_string("app:no +app")
+    enhancements.apply_modifications_to_frame([frame], "native", None)
+    assert frame.get("in_app")