File tree Expand file tree Collapse file tree 2 files changed +21
-1
lines changed
google/cloud/logging_v2/handlers Expand file tree Collapse file tree 2 files changed +21
-1
lines changed Original file line number Diff line number Diff line change @@ -104,10 +104,17 @@ def get_request_data_from_django():
104
104
if request is None :
105
105
return None , None , None , False
106
106
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
+
107
114
# build http_request
108
115
http_request = {
109
116
"requestMethod" : request .method ,
110
- "requestUrl" : request . build_absolute_uri () ,
117
+ "requestUrl" : request_url ,
111
118
"userAgent" : request .META .get (_DJANGO_USERAGENT_HEADER ),
112
119
"protocol" : request .META .get (_PROTOCOL_HEADER ),
113
120
}
Original file line number Diff line number Diff line change @@ -242,6 +242,19 @@ def test_http_request_sparse(self):
242
242
self .assertEqual (http_request ["requestUrl" ], expected_path )
243
243
self .assertEqual (http_request ["protocol" ], "HTTP/1.1" )
244
244
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
+
245
258
246
259
class Test_get_request_data (unittest .TestCase ):
247
260
@staticmethod
You can’t perform that action at this time.
0 commit comments