Skip to content

Commit 5ecf886

Browse files
fix: Handle exceptions raised when fetching Django request data (#758)
1 parent 41e073f commit 5ecf886

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

google/cloud/logging_v2/handlers/_helpers.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,17 @@ def get_request_data_from_django():
104104
if request is None:
105105
return None, None, None, False
106106

107+
# Django can raise django.core.exceptions.DisallowedHost here for a
108+
# malformed HTTP_HOST header. But we don't want to import Django modules.
109+
try:
110+
request_url = request.build_absolute_uri()
111+
except Exception:
112+
request_url = None
113+
107114
# build http_request
108115
http_request = {
109116
"requestMethod": request.method,
110-
"requestUrl": request.build_absolute_uri(),
117+
"requestUrl": request_url,
111118
"userAgent": request.META.get(_DJANGO_USERAGENT_HEADER),
112119
"protocol": request.META.get(_PROTOCOL_HEADER),
113120
}

tests/unit/handlers/test__helpers.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,19 @@ def test_http_request_sparse(self):
242242
self.assertEqual(http_request["requestUrl"], expected_path)
243243
self.assertEqual(http_request["protocol"], "HTTP/1.1")
244244

245+
def test_invalid_host_header(self):
246+
from django.test import RequestFactory
247+
from google.cloud.logging_v2.handlers.middleware import request
248+
249+
invalid_http_host = "testserver%7d"
250+
django_request = RequestFactory().put("/", HTTP_HOST=invalid_http_host)
251+
middleware = request.RequestMiddleware(None)
252+
middleware(django_request)
253+
http_request, *_ = self._call_fut()
254+
self.assertEqual(http_request["requestMethod"], "PUT")
255+
self.assertIsNone(http_request["requestUrl"])
256+
self.assertEqual(http_request["protocol"], "HTTP/1.1")
257+
245258

246259
class Test_get_request_data(unittest.TestCase):
247260
@staticmethod

0 commit comments

Comments
 (0)