From 2b0420e5990f9a18a381c4323fbdf0dd46b58934 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 21 Aug 2026 07:51:10 +1000 Subject: [PATCH] Dictionary key must be a name --- Tests/test_pdfparser.py | 2 ++ src/PIL/PdfParser.py | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Tests/test_pdfparser.py b/Tests/test_pdfparser.py index dbe46166bd2..f2ae6b11f59 100644 --- a/Tests/test_pdfparser.py +++ b/Tests/test_pdfparser.py @@ -67,6 +67,8 @@ def test_parsing() -> None: assert PdfParser.get_value(b" 123.4 %", 0)[1] == 6 with pytest.raises(PdfFormatError): PdfParser.get_value(b"]", 0) + with pytest.raises(PdfFormatError, match="key must be a name"): + PdfParser.get_value(b"<>", 0) d = PdfParser.get_value(b"<>", 0)[0] assert isinstance(d, PdfDict) assert len(d) == 2 diff --git a/src/PIL/PdfParser.py b/src/PIL/PdfParser.py index 132b6ac8b78..a75f43a354a 100644 --- a/src/PIL/PdfParser.py +++ b/src/PIL/PdfParser.py @@ -886,13 +886,13 @@ def get_value( current_offset: int | None = offset while not m: assert current_offset is not None - key, current_offset = cls.get_value( - data, current_offset, max_nesting=max_nesting - 1 - ) - if current_offset is None: - return result, None + m = cls.re_name.match(data, current_offset) + if not m: + msg = "key must be a name" + raise PdfFormatError(msg) + key = PdfName(cls.interpret_name(m.group(1))) value, current_offset = cls.get_value( - data, current_offset, max_nesting=max_nesting - 1 + data, m.end(), max_nesting=max_nesting - 1 ) result[key] = value if current_offset is None: