The below code triggers an exception with the following message: ValueError: invalid literal for int() with base 10: '\x0c'. This occurs in _process_keyword_line at line 251 in pofile.py as a result of a failure to check the validity of an integer conversion.
import io
from babel.messages.pofile import read_po
data = io.StringIO("msgstr[\x0c]")
read_po(data)
Version
2.17.0
Trace report
Traceback (most recent call last):
File "rep.py", line 5, in <module>
read_po(data)
File "lib/python3.10/site-packages/babel/messages/pofile.py", line 406, in read_po
parser.parse(fileobj)
File "lib/python3.10/site-packages/babel/messages/pofile.py", line 331, in parse
self._process_message_line(lineno, line)
File "lib/python3.10/site-packages/babel/messages/pofile.py", line 221, in _process_message_line
self._process_keyword_line(lineno, line, obsolete)
File "/lib/python3.10/site-packages/babel/messages/pofile.py", line 251, in _process_keyword_line
idx = int(idxarg[:-1]) if has_bracket else 0
ValueError: invalid literal for int() with base 10: '\x0c'
Do you have a link to a .po file "in the wild" that exhibits a msgstr keyword having an argument like that? As far as I can tell from the spec, as it were, plural msgstrs are expected to have numeric indices.
I see, I understand what you mean. In this case, since it's an invalid .po file, maybe a PoFileError should be raised to better reflect to the user that the file is invalid.
Activity
akx commented on May 13, 2025
Hi, thank you for the report.
Do you have a link to a .po file "in the wild" that exhibits a msgstr keyword having an argument like that? As far as I can tell from the spec, as it were, plural msgstrs are expected to have numeric indices.
gabe-sherman commented on May 13, 2025
I see, I understand what you mean. In this case, since it's an invalid .po file, maybe a PoFileError should be raised to better reflect to the user that the file is invalid.
Handle an invalid plural index in msgstr[...] instead of raising Valu…