From 8abfd9a7970e000db4540aa71c57008f34fabff0 Mon Sep 17 00:00:00 2001 From: calixteman Date: Tue, 13 Jan 2026 20:59:22 +0100 Subject: [PATCH] Avoid exception after having moved an annotation It fixes #20571. --- src/display/editor/editor.js | 3 ++ test/integration/freetext_editor_spec.mjs | 42 +++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/src/display/editor/editor.js b/src/display/editor/editor.js index 043873e6de2d4..db014c7e9bef4 100644 --- a/src/display/editor/editor.js +++ b/src/display/editor/editor.js @@ -1204,6 +1204,9 @@ class AnnotationEditor { } get comment() { + if (!this.#comment) { + return null; + } const { data: { richText, text, date, deleted }, } = this.#comment; diff --git a/test/integration/freetext_editor_spec.mjs b/test/integration/freetext_editor_spec.mjs index b8a5cb4e6ba81..df0f17662370a 100644 --- a/test/integration/freetext_editor_spec.mjs +++ b/test/integration/freetext_editor_spec.mjs @@ -3645,4 +3645,46 @@ describe("FreeText Editor", () => { ); }); }); + + describe("No exception when moving (issue 20571)", () => { + let pages; + + beforeEach(async () => { + pages = await loadAndWait( + "tracemonkey.pdf", + ".annotationEditorLayer", + 100 + ); + }); + + afterEach(async () => { + await closePages(pages); + }); + + it("must check that the buttons work correctly", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + await switchToFreeText(page); + + const rect = await getRect(page, ".annotationEditorLayer"); + await createFreeTextEditor({ + page, + x: rect.x + 100, + y: rect.y + 100, + data: "Hello PDF.js World !!", + }); + + await switchToFreeText(page, /* disable = */ true); + await switchToFreeText(page); + + const editorSelector = getEditorSelector(0); + await selectEditor(page, editorSelector); + await dragAndDrop(page, editorSelector, [[10, 10]]); + + await switchToFreeText(page, /* disable = */ true); + await switchToFreeText(page); + }) + ); + }); + }); });