Skip to content

Commit b0e5c68

Browse files
authored
BUG: Prevent infinite loop when no character follows after a comment (#1828)
Fixes #1825
1 parent dc6a92e commit b0e5c68

File tree

5 files changed

+18
-1
lines changed

5 files changed

+18
-1
lines changed

pypdf/generic/_data_structures.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1016,7 +1016,7 @@ def __parse_content_stream(self, stream: StreamType) -> None:
10161016
# encountering a comment -- but read_object assumes that
10171017
# following the comment must be the object we're trying to
10181018
# read. In this case, it could be an operator instead.
1019-
while peek not in (b"\r", b"\n"):
1019+
while peek not in (b"\r", b"\n", b""):
10201020
peek = stream.read(1)
10211021
else:
10221022
operands.append(read_object(stream, None, self.forced_encoding))

requirements/ci-3.11.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,13 @@ pytest==7.2.2
5050
# -r requirements/ci.in
5151
# pytest-benchmark
5252
# pytest-socket
53+
# pytest-timeout
5354
pytest-benchmark==4.0.0
5455
# via -r requirements/ci.in
5556
pytest-socket==0.6.0
5657
# via -r requirements/ci.in
58+
pytest-timeout==2.1.0
59+
# via -r requirements/ci.in
5760
ruff==0.0.259
5861
# via -r requirements/ci.in
5962
typeguard==3.0.2

requirements/ci.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ pycryptodome
99
pytest
1010
pytest-benchmark
1111
pytest-socket
12+
pytest-timeout
1213
typeguard
1314
types-dataclasses
1415
types-Pillow

requirements/ci.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,13 @@ pytest==7.0.1
6262
# -r requirements/ci.in
6363
# pytest-benchmark
6464
# pytest-socket
65+
# pytest-timeout
6566
pytest-benchmark==3.4.1
6667
# via -r requirements/ci.in
6768
pytest-socket==0.4.1
6869
# via -r requirements/ci.in
70+
pytest-timeout==2.1.0
71+
# via -r requirements/ci.in
6972
six==1.16.0
7073
# via flake8-print
7174
tomli==1.2.3

tests/test_reader.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1401,3 +1401,13 @@ def test_iss1756():
14011401
in_pdf = PdfReader(BytesIO(get_pdf_from_url(url, name=name)))
14021402
in_pdf.trailer["/ID"]
14031403
# removed to cope with missing cryptodome during commit check : len(in_pdf.pages)
1404+
1405+
1406+
@pytest.mark.enable_socket()
1407+
@pytest.mark.timeout(30)
1408+
def test_iss1825():
1409+
url = "https://github.com/py-pdf/pypdf/files/11367871/MiFO_LFO_FEIS_NOA_Published.3.pdf"
1410+
name = "iss1825.pdf"
1411+
reader = PdfReader(BytesIO(get_pdf_from_url(url, name=name)))
1412+
page = reader.pages[0]
1413+
page.extract_text()

0 commit comments

Comments
 (0)