From 57bae94baaeb666683923c251982b2d2400c0130 Mon Sep 17 00:00:00 2001 From: Hiren Date: Tue, 9 Jun 2026 22:06:19 -0400 Subject: [PATCH] fix: skip invalid widget rects in remove_rotation --- src/__init__.py | 2 ++ tests/test_widgets.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/__init__.py b/src/__init__.py index bfa801be9..83b5ae12e 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -11933,6 +11933,8 @@ def remove_rotation(self): pass for widget in self.widgets(): # modify field rectangles r = widget.rect * rot + if r.is_empty or r.is_infinite: + continue widget.rect = r widget.update() return rot # the inverse of the generated derotation matrix diff --git a/tests/test_widgets.py b/tests/test_widgets.py index 4158f6e18..bbb21b09f 100644 --- a/tests/test_widgets.py +++ b/tests/test_widgets.py @@ -465,3 +465,24 @@ def test_4114(): widget.update() document.save(path_out) assert values == expected_values2 + + +def test_4950(): + with pymupdf.open() as document: + page = document.new_page() + page.set_rotation(90) + + # Simulate an existing invisible signature field with a zero-dimension + # rectangle. Creating such a widget through add_widget() is rejected by + # validation, so create a valid widget first and then modify the PDF + # object directly. + widget = pymupdf.Widget() + widget.field_name = "Signature" + widget.field_type = pymupdf.PDF_WIDGET_TYPE_SIGNATURE + widget.rect = pymupdf.Rect(0, 0, 10, 10) + page.add_widget(widget) + document.xref_set_key(page.first_widget.xref, "Rect", "[0 0 0 0]") + page = document.reload_page(page) + + page.remove_rotation() + assert page.rotation == 0