8000 fix: Wsgi - valid JSONs ([], {}) are evaluated as raw data · getsentry/sentry-python@00c1433 · GitHub
[go: up one dir, main page]

Skip to content

Commit 00c1433

Browse files
committed
fix: Wsgi - valid JSONs ([], {}) are evaluated as raw data
It should be evaluated as empty JSON object/array Note that according to RFC 4627 top level elements can be empty objects or arrays
1 parent a0d8d71 commit 00c1433

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

sentry_sdk/integrations/_wsgi_common.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def extract_into_event(self, event):
4242
)
4343
else:
4444
parsed_body = self.parsed_body()
45-
if parsed_body:
45+
if parsed_body is not None:
4646
data = parsed_body
4747
elif self.raw_data():
4848
data = AnnotatedValue(

tests/integrations/flask/test_flask.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,29 @@ def index():
214214
assert len(event["request"]["data"]["foo"]["bar"]) == 512
215215

216216

217+
@pytest.mark.parametrize(
218+
"data", [{}, []], ids=["empty-dict", "empty-list"])
219+
def test_flask_empty_json_request(sentry_init, capture_events, app, data):
220+
sentry_init(integrations=[flask_sentry.FlaskIntegration()])
221+
222+
@app.route("/", methods=["POST"])
223+
def index():
224+
assert request.json == data
225+
assert request.data == json.dumps(data).encode("ascii")
226+
assert not request.form
227+
capture_message("hi")
228+
return "ok"
229+
230+
events = capture_events()
231+
232+
client = app.test_client()
233+
response = client.post("/", content_type="application/json", data=json.dumps(data))
234+
assert response.status_code == 200
235+
236+
event, = events
237+
assert event["request"]["data"] == data
238+
239+
217240
def test_flask_medium_formdata_request(sentry_init, capture_events, app):
218241
sentry_init(integrations=[flask_sentry.FlaskIntegration()])
219242

tests/integrations/pyramid/test_pyramid.py

Lines changed: 26 additions & 8000 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,32 @@ def index(request):
142142
assert len(event["request"]["data"]["foo"]["bar"]) == 512
143143

144144

145+
@pytest.mark.parametrize(
146+
"data", [{}, []], ids=["empty-dict", "empty-list"]
147+
)
148+
def test_flask_empty_json_request(
149+
sentry_init, capture_events, route, get_client, data
150+
):
151+
sentry_init(integrations=[PyramidIntegration()])
152+
153+
@route("/")
154+
def index(request):
155+
assert request.json == data
156+
assert request.text == json.dumps(data)
157+
assert not request.POST
158+
capture_message("hi")
159+
return Response("ok")
160+
161+
events = capture_events()
162+
163+
client = get_client()
164+
response = client.post("/", content_type="application/json", data=json.dumps(data))
165+
assert response[1] == '200 OK'
166+
167+
event, = events
168+
assert event["request"]["data"] == data
169+
170+
145171
def test_files_and_form(sentry_init, capture_events, route, get_client):
146172
sentry_init(integrations=[PyramidIntegration()], request_bodies="always")
147173

0 commit comments

Comments
 (0)
0