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?
# 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)
--- /dev/null
+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.