]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45874: Handle empty query string correctly in urllib.parse.parse_qsl (#29716)
authorChristian Sattler <sattler.christian@gmail.com>
Sun, 12 Dec 2021 08:41:12 +0000 (09:41 +0100)
committerGitHub <noreply@github.com>
Sun, 12 Dec 2021 08:41:12 +0000 (10:41 +0200)
Lib/test/test_cgi.py
Lib/urllib/parse.py
Misc/NEWS.d/next/Library/2021-12-02-11-55-45.bpo-45874.dtJIsN.rst [new file with mode: 0644]

index c1b893d3fe534a396152a481db571e72c442b7fb..06762f8872a302598ab63dc34280f5088abd2996 100644 (file)
@@ -51,7 +51,7 @@ def do_test(buf, method):
         return ComparableException(err)
 
 parse_strict_test_cases = [
-    ("", ValueError("bad query field: ''")),
+    ("", {}),
     ("&", ValueError("bad query field: ''")),
     ("&&", ValueError("bad query field: ''")),
     # Should the next few really be valid?
index bf16d0f42e57949b1a192a459dae2e6518a90636..67ba308c409a2f919a5595e8b23f29374231eb3c 100644 (file)
@@ -740,12 +740,13 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
     # is less than max_num_fields. This prevents a memory exhaustion DOS
     # attack via post bodies with many fields.
     if max_num_fields is not None:
-        num_fields = 1 + qs.count(separator)
+        num_fields = 1 + qs.count(separator) if qs else 0
         if max_num_fields < num_fields:
             raise ValueError('Max number of fields exceeded')
 
     r = []
-    for name_value in qs.split(separator):
+    query_args = qs.split(separator) if qs else []
+    for name_value in query_args:
         if not name_value and not strict_parsing:
             continue
         nv = name_value.split('=', 1)
diff --git a/Misc/NEWS.d/next/Library/2021-12-02-11-55-45.bpo-45874.dtJIsN.rst b/Misc/NEWS.d/next/Library/2021-12-02-11-55-45.bpo-45874.dtJIsN.rst
new file mode 100644 (file)
index 0000000..ef793cf
--- /dev/null
@@ -0,0 +1,3 @@
+The empty query string, consisting of no query arguments, is now handled
+correctly in ``urllib.parse.parse_qsl``. This caused problems before when
+strict parsing was enabled.