Skip to content

Commit

Permalink
Terminal ENH: report PdfReadError instead of RecursionError
Browse files Browse the repository at this point in the history
  • Loading branch information
pubpub-zz committed Aug 14, 2024
1 parent 2eb565d commit 2f1a623
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
5 changes: 4 additions & 1 deletion pypdf/_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -541,7 +541,10 @@ def read_object_header(self, stream: StreamType) -> Tuple[int, int]:
def cache_get_indirect_object(
self, generation: int, idnum: int
) -> Optional[PdfObject]:
return self.resolved_objects.get((generation, idnum))
try:
return self.resolved_objects.get((generation, idnum))
except RecursionError:
raise PdfReadError("Max recursion Error")

def cache_indirect_object(
self, generation: int, idnum: int, obj: Optional[PdfObject]
Expand Down
14 changes: 13 additions & 1 deletion tests/test_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ def test_iss1943():
docinfo = reader.metadata
docinfo.update(
{
NameObject("/CreationDate"): TextStringObject("D:20230705005151Z00'00'"),
NameObject("/CreationDate"): TextStringObject(
"D:20230705005151Z00'00'"
),
NameObject("/ModDate"): TextStringObject("D:20230705005151Z00'00'"),
}
)
Expand Down Expand Up @@ -1577,3 +1579,13 @@ def test_context_manager_with_stream():
with PdfReader(pdf_stream) as reader:
assert not reader.stream.closed
assert not pdf_stream.closed


@pytest.mark.enable_socket()
@pytest.mark.timeout(10)
def test_iss2761():
url = "https://github.com/user-attachments/files/16312198/crash-b26d05712a29b241ac6f9dc7fff57428ba2d1a04.pdf"
name = "iss2761.pdf"
reader = PdfReader(BytesIO(get_data_from_url(url, name=name)), strict=False)
with pytest.raises(PdfReadError):
reader.pages[0].extract_text()

0 comments on commit 2f1a623

Please sign in to comment.