diff --git a/PyPDF2/generic.py b/PyPDF2/generic.py index 3b82483c7..5b84ec02d 100644 --- a/PyPDF2/generic.py +++ b/PyPDF2/generic.py @@ -135,6 +135,9 @@ def writeToStream( deprecate_with_replacement("writeToStream", "write_to_stream") self.write_to_stream(stream, encryption_key) + def __repr__(self) -> str: + return "NullObject" + @staticmethod def readFromStream(stream: StreamType) -> "NullObject": # pragma: no cover deprecate_with_replacement("readFromStream", "read_from_stream") @@ -1813,9 +1816,15 @@ def __init__( self[NameObject(TA.TOP)], ) = args elif typ in [TF.FIT_H, TF.FIT_BH]: - (self[NameObject(TA.TOP)],) = args + try: # Prefered to be more robust not only to null parameters + (self[NameObject(TA.TOP)],) = args + except Exception: + (self[NameObject(TA.TOP)],) = (NullObject(),) elif typ in [TF.FIT_V, TF.FIT_BV]: - (self[NameObject(TA.LEFT)],) = args + try: # Prefered to be more robust not only to null parameters + (self[NameObject(TA.LEFT)],) = args + except Exception: + (self[NameObject(TA.LEFT)],) = (NullObject(),) elif typ in [TF.FIT, TF.FIT_B]: pass else: diff --git a/tests/test_merger.py b/tests/test_merger.py index 2a9d9e4e6..2af7a0251 100644 --- a/tests/test_merger.py +++ b/tests/test_merger.py @@ -288,3 +288,11 @@ def test_sweep_indirect_list_newobj_is_None(): # cleanup os.remove("tmp-merger-do-not-commit.pdf") + + +def test_iss1145(): + # issue with FitH destination with null param + url = "https://github.com/py-pdf/PyPDF2/files/9164743/file-0.pdf" + name = "iss1145.pdf" + merger = PdfMerger() + merger.append(PdfReader(BytesIO(get_pdf_from_url(url, name=name))))