summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
authorFlorian Apolloner <florian@apolloner.eu>2019-07-19 17:04:53 +0200
committerCarlton Gibson <carlton.gibson@noumenal.es>2019-07-29 11:06:54 +0200
commitcf694e6852b0da7799f8b53f1fb2f7d20cf17534 (patch)
tree54a6364a37c9bd1626cc393592b30b9daaf8350e /django/utils
parent4f5b58f5cd3c57fee9972ab074f8dc6895d8f387 (diff)
[2.2.x] Fixed CVE-2019-14235 -- Fixed potential memory exhaustion in django.utils.encoding.uri_to_iri().
Thanks to Guido Vranken for initial report.
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/encoding.py17
1 files changed, 10 insertions, 7 deletions
diff --git a/django/utils/encoding.py b/django/utils/encoding.py
index 1a1a6d06b1..98da64730d 100644
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -225,13 +225,16 @@ def repercent_broken_unicode(path):
repercent-encode any octet produced that is not part of a strictly legal
UTF-8 octet sequence.
"""
- try:
- path.decode()
- except UnicodeDecodeError as e:
- repercent = quote(path[e.start:e.end], safe=b"/#%[]=:;$&()+,!?*@'~")
- path = repercent_broken_unicode(
- path[:e.start] + force_bytes(repercent) + path[e.end:])
- return path
+ while True:
+ try:
+ path.decode()
+ except UnicodeDecodeError as e:
+ # CVE-2019-14235: A recursion shouldn't be used since the exception
+ # handling uses massive amounts of memory
+ repercent = quote(path[e.start:e.end], safe=b"/#%[]=:;$&()+,!?*@'~")
+ path = path[:e.start] + force_bytes(repercent) + path[e.end:]
+ else:
+ return path
def filepath_to_uri(path):