From 08fa4eba20f6d9ec4ad42ac0d209529292c55e8c Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Thu, 6 Mar 2025 15:17:52 +0100 Subject: [PATCH] Fix the `#savedHasOwnCanvas` handling in the `StampAnnotation` class This may not be possible to trigger in practice, however it seems that if `StampAnnotation.prototype.mustBeViewedWhenEditing` is called back-to-back with `isEditing === true` set then the second invocation could overwrite the `#savedHasOwnCanvas`-field and thus lose its initial state. --- src/core/annotation.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/core/annotation.js b/src/core/annotation.js index a3d05f278..fc7b991ff 100644 --- a/src/core/annotation.js +++ b/src/core/annotation.js @@ -4905,13 +4905,13 @@ class StrikeOutAnnotation extends MarkupAnnotation { } class StampAnnotation extends MarkupAnnotation { - #savedHasOwnCanvas; + #savedHasOwnCanvas = null; constructor(params) { super(params); this.data.annotationType = AnnotationType.STAMP; - this.#savedHasOwnCanvas = this.data.hasOwnCanvas = this.data.noRotate; + this.data.hasOwnCanvas = this.data.noRotate; this.data.isEditable = !this.data.noHTML; // We want to be able to add mouse listeners to the annotation. this.data.noHTML = false; @@ -4924,11 +4924,14 @@ class StampAnnotation extends MarkupAnnotation { } // When we're editing, we want to ensure that the stamp annotation is // drawn on a canvas in order to use it in the annotation editor layer. - this.#savedHasOwnCanvas = this.data.hasOwnCanvas; + this.#savedHasOwnCanvas ??= this.data.hasOwnCanvas; this.data.hasOwnCanvas = true; return true; } - this.data.hasOwnCanvas = this.#savedHasOwnCanvas; + if (this.#savedHasOwnCanvas !== null) { + this.data.hasOwnCanvas = this.#savedHasOwnCanvas; + this.#savedHasOwnCanvas = null; + } return !modifiedIds?.has(this.data.id); }