Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e6fe10d

Browse files
authored
bpo-45874: Handle empty query string correctly in urllib.parse.parse_qsl (#29716)
1 parent 4325a76 commit e6fe10d

3 files changed

Lines changed: 7 additions & 3 deletions

File tree

Lib/test/test_cgi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ def do_test(buf, method):
5151
return ComparableException(err)
5252

5353
parse_strict_test_cases = [
54-
("", ValueError("bad query field: ''")),
54+
("", {}),
5555
("&", ValueError("bad query field: ''")),
5656
("&&", ValueError("bad query field: ''")),
5757
# Should the next few really be valid?

Lib/urllib/parse.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,12 +740,13 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
740740
# is less than max_num_fields. This prevents a memory exhaustion DOS
741741
# attack via post bodies with many fields.
742742
if max_num_fields is not None:
743-
num_fields = 1 + qs.count(separator)
743+
num_fields = 1 + qs.count(separator) if qs else 0
744744
if max_num_fields < num_fields:
745745
raise ValueError('Max number of fields exceeded')
746746

747747
r = []
748-
for name_value in qs.split(separator):
748+
query_args = qs.split(separator) if qs else []
749+
for name_value in query_args:
749750
if not name_value and not strict_parsing:
750751
continue
751752
nv = name_value.split('=', 1)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
The empty query string, consisting of no query arguments, is now handled
2+
correctly in ``urllib.parse.parse_qsl``. This caused problems before when
3+
strict parsing was enabled.

0 commit comments

Comments
 (0)