Repository navigation
Closed
Labels
Description
Bug report
email._header_value_parser tries to raise errors.InvalidHeaderError, but that does not exist (and as far as I can tell, never did):
>>> from email.headerregistry import HeaderRegistry
>>> reg = HeaderRegistry()
>>> reg('Content-Disposition', 'attachment; 0*00="foo"')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.10/email/headerregistry.py", line 604, in __call__
return self[name](name, value)
File "/usr/lib/python3.10/email/headerregistry.py", line 192, in __new__
cls.parse(value, kwds)
File "/usr/lib/python3.10/email/headerregistry.py", line 448, in parse
kwds['parse_tree'] = parse_tree = cls.value_parser(value)
File "/usr/lib/python3.10/email/_header_value_parser.py", line 2705, in parse_content_disposition_header
disp_header.append(parse_mime_parameters(value[1:]))
File "/usr/lib/python3.10/email/_header_value_parser.py", line 2569, in parse_mime_parameters
token, value = get_parameter(value)
File "/usr/lib/python3.10/email/_header_value_parser.py", line 2431, in get_parameter
token, value = get_section(value)
File "/usr/lib/python3.10/email/_header_value_parser.py", line 2382, in get_section
section.defects.append(errors.InvalidHeaderError(
AttributeError: module 'email.errors' has no attribute 'InvalidHeaderError'. Did you mean: 'InvalidHeaderDefect'?Code:
cpython/Lib/email/_header_value_parser.py
Lines 2381 to 2383 in d853758
| if digits[0] == '0' and digits != '0': | |
| section.defects.append(errors.InvalidHeaderError( | |
| "section number has an invalid leading 0")) |
This was added in 97f43c0 by @bitdancer pretty much some 10 years ago, and I don't think it ever worked (but nor could I find anyone running into this so far): The git history doesn't know anything about an email.errors.InvalidHeaderError.
Found via Hypothesis while testing my own parsing code - cc @Zac-HD if you want to see another instance of "the curse of hypothesis" 😉
Your environment
- CPython versions tested on: 3.7.13, 3.8.13, 3.9.13, 3.10.4, 3.11.0b1
- Operating system and architecture: Archlinux, x86_64
Reacted by Zac Hatfield-Dodds
Activity
warsaw commentedon May 20, 2022
Oh wow, nice find.
Zac-HD commentedon May 20, 2022
Nice find!
On a meta-level though this suggests that CPython could really benefit from adopting some static analysis tooling and/or coverage requirements which are table stakes for any critical project... maybe I can argue for that instead of PBT at the next summit 😅
The-Compiler commentedon May 20, 2022
Agreed! FWIW I tried to run flake8 with a lot of ignored errors and manual processing, and I believe I now have another handful of bugs/PRs to report... 😅
The-Compiler commentedon May 23, 2022
For anyone curious about the result of running
flake8and taking a closer look at the result: I spent hours today reporting 9 more similar bugs, see them linked above. Decided to not report theencodings.mac_arabicone despite it probably being a genuine issue too - it was added in 2005, seems to be autogenerated, and hasn't seen any significant changes since then. Given how irrelevant it probably is today, I'm guessing nobody will care (and that's probably okay too!).gh-93010: InvalidHeaderError used but nonexistent (#93015)
pythongh-93010: InvalidHeaderError used but nonexistent (pythonGH-93015)
pythongh-93010: InvalidHeaderError used but nonexistent (pythonGH-93015)
warsaw commentedon May 23, 2022
@The-Compiler Thanks for the above reports. This issue is now fix, thus closing.
gh-93010: InvalidHeaderError used but nonexistent (GH-93015)
gh-93010: InvalidHeaderError used but nonexistent (GH-93015)
Update content-disposition parsing workaround
Update content-disposition parsing workaround
Fix coverage pragmas for Content-Disposition parsing