Skip to content

Commit 2821be1

Browse files
authored
Fix exception for bad port in Django request (#1590)
1 parent be6f4ed commit 2821be1

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

elasticapm/contrib/django/client.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,10 @@ def get_data_from_request(self, request, event_type):
152152
result["body"] = data
153153

154154
url = get_raw_uri(request)
155-
result["url"] = get_url_dict(url)
155+
try:
156+
result["url"] = get_url_dict(url)
157+
except ValueError as exc:
158+
self.logger.warning(f"URL parsing failed: {exc}")
156159
return result
157160

158161
def get_data_from_response(self, response, event_type):

tests/contrib/django/django_tests.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1671,3 +1671,26 @@ def test_transaction_name_from_class_based_view(client, django_elasticapm_client
16711671
client.get(reverse("elasticapm-class-based"))
16721672
transaction = django_elasticapm_client.events[TRANSACTION][0]
16731673
assert transaction["name"] == "GET tests.contrib.django.testapp.views.ClassBasedView"
1674+
1675+
1676+
def test_request_bad_port(django_elasticapm_client):
1677+
request = WSGIRequest(
1678+
environ={
1679+
"wsgi.input": io.BytesIO(),
1680+
"REQUEST_METHOD": "POST",
1681+
"SERVER_NAME": "testserver",
1682+
"SERVER_PORT": "${port}",
1683+
"CONTENT_TYPE": "text/html",
1684+
"ACCEPT": "text/html",
1685+
}
1686+
)
1687+
request.read(1)
1688+
1689+
django_elasticapm_client.capture("Message", message="foo", request=request)
1690+
1691+
assert len(django_elasticapm_client.events[ERROR]) == 1
1692+
event = django_elasticapm_client.events[ERROR][0]
1693+
1694+
assert "request" in event["context"]
1695+
request = event["context"]["request"]
1696+
assert "url" not in request

0 commit comments

Comments
 (0)