Skip to content

Commit 55d596d

Browse files
authored
Fixed #233 -- Fixed middleware crash on invalid IP address in REMOTE_ADDR.
1 parent 8de64be commit 55d596d

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121

2222
* Confirms support for Python 3.9.
2323

24+
### Bug Fixes
25+
26+
* Fixes middleware crash on invalid IP addresses in ``REMOTE_ADDR``.
27+
2428
## 1.5.6.
2529

2630
### Breaking

request/middleware.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from django.core.exceptions import ValidationError
12
from django.utils.deprecation import MiddlewareMixin
23

34
from . import settings
@@ -33,6 +34,11 @@ def process_response(self, request, response):
3334
return response
3435

3536
r = Request()
36-
r.from_http_request(request, response)
37-
37+
try:
38+
r.from_http_request(request, response, commit=False)
39+
r.full_clean()
40+
except ValidationError:
41+
pass
42+
else:
43+
r.save()
3844
return response

tests/test_middlewares.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@ def test_dont_record_ignored_ips(self):
133133
self.middleware(request)
134134
self.assertEqual(1, Request.objects.count())
135135

136+
def test_invalid_addr(self):
137+
request = self.factory.get('/foo')
138+
request.META['REMOTE_ADDR'] = 'invalid-addr'
139+
self.middleware(request)
140+
self.assertEqual(Request.objects.count(), 0)
141+
136142
@mock.patch('request.middleware.settings.IGNORE_USER_AGENTS',
137143
(r'^.*Foo.*$',))
138144
def test_dont_record_ignored_user_agents(self):

0 commit comments

Comments
 (0)