babel icon indicating copy to clipboard operation
babel copied to clipboard

Unhandled ValueError raised in read_po

Open gabe-sherman opened this issue 8 months ago • 2 comments

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'

gabe-sherman avatar May 12 '25 17:05 gabe-sherman

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.

akx avatar May 13 '25 15:05 akx

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.

gabe-sherman avatar May 13 '25 16:05 gabe-sherman