gh-44827: Improve error if BOM on first line of .po file (GH-130187)

This commit is contained in:
Stan Ulbrych 2025-02-18 13:59:34 +00:00 committed by GitHub
parent 185ac5adaf
commit 01ba7df499
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 18 additions and 0 deletions

View file

@ -39,6 +39,14 @@ class CompilationTest(unittest.TestCase):
self.assertDictEqual(actual._catalog, expected._catalog) self.assertDictEqual(actual._catalog, expected._catalog)
def test_po_with_bom(self):
with temp_cwd():
Path('bom.po').write_bytes(b'\xef\xbb\xbfmsgid "Python"\nmsgstr "Pioton"\n')
res = assert_python_failure(msgfmt, 'bom.po')
err = res.err.decode('utf-8')
self.assertIn('The file bom.po starts with a UTF-8 BOM', err)
def test_invalid_msgid_plural(self): def test_invalid_msgid_plural(self):
with temp_cwd(): with temp_cwd():
Path('invalid.po').write_text('''\ Path('invalid.po').write_text('''\

View file

@ -32,9 +32,11 @@ import getopt
import struct import struct
import array import array
from email.parser import HeaderParser from email.parser import HeaderParser
import codecs
__version__ = "1.2" __version__ = "1.2"
MESSAGES = {} MESSAGES = {}
@ -116,6 +118,14 @@ def make(filename, outfile):
print(msg, file=sys.stderr) print(msg, file=sys.stderr)
sys.exit(1) sys.exit(1)
if lines[0].startswith(codecs.BOM_UTF8):
print(
f"The file {infile} starts with a UTF-8 BOM which is not allowed in .po files.\n"
"Please save the file without a BOM and try again.",
file=sys.stderr
)
sys.exit(1)
section = msgctxt = None section = msgctxt = None
fuzzy = 0 fuzzy = 0