Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions Lib/email/_header_value_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2404,11 +2404,12 @@ def get_section(value):
value))
section.append(ValueTerminal('*', 'section-marker'))
value = value[1:]
if not value or not value[0].isdigit():
# We don't use str.isdigit because only ASCII digits are allowed.
if not value or not ('0' <= value[0] <= '9'):
raise errors.HeaderParseError("Expected section number but "
"found {}".format(value))
digits = ''
while value and value[0].isdigit():
while value and ('0' <= value[0] <= '9'):
digits += value[0]
value = value[1:]
if digits[0] == '0' and digits != '0':
Expand Down
8 changes: 8 additions & 0 deletions Lib/test/test_email/test__header_value_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -2982,6 +2982,14 @@ def mime_parameters_as_value(self,
'r*=\'a\'"',
[('r', '"')],
[errors.InvalidHeaderDefect]*2),

# gh-87112: Only ASCII digits can be section numbers.
'non_allowed_digits': (
'foo*0=bar; foo*²=baz',
' foo="bar"',
'foo*0=bar; foo*²=baz',
[('foo', 'bar')],
[errors.InvalidHeaderDefect]),
}

@parameterize
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Ensure that only ASCII digits are accepted as section number in MIME header
parameter.
Loading