1
0
Fork 0
mirror of https://github.com/mozilla/pdf.js.git synced 2025-04-19 22:58:07 +02:00

Merge pull request #18566 from calixteman/issue18561

Don't stop calculating field values when a Calculate callback throws
This commit is contained in:
Tim van der Meij 2024-08-06 17:59:15 +02:00 committed by GitHub
commit 341a0b6d47
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 39 additions and 1 deletions

View file

@ -14,6 +14,7 @@
*/
import {
serializeError,
USERACTIVATION_CALLBACKID,
USERACTIVATION_MAXTIME_VALIDITY,
} from "./app_utils.js";
@ -344,7 +345,15 @@ class EventDispatcher {
event.value = null;
const target = this._objects[targetId];
let savedValue = target.obj._getValue();
this.runActions(source, target, event, "Calculate");
try {
this.runActions(source, target, event, "Calculate");
} catch (error) {
const fieldId = target.obj._id;
const serializedError = serializeError(error);
serializedError.value = `Error when calculating value for field "${fieldId}"\n${serializedError.value}`;
this._externalCall("send", [serializedError]);
continue;
}
if (!event.rc) {
continue;
}

View file

@ -2461,4 +2461,32 @@ describe("Interaction", () => {
);
});
});
describe("Calculate field value even if one callback throws", () => {
let pages;
beforeAll(async () => {
pages = await loadAndWait("issue18561.pdf", getSelector("24R"));
});
afterAll(async () => {
await closePages(pages);
});
it("must check that the product is computed although a callback threw", async () => {
await Promise.all(
pages.map(async ([browserName, page], i) => {
await waitForScripting(page);
const inputSelector = getSelector("24R");
await page.click(inputSelector);
await page.type(inputSelector, "123");
await page.click(getSelector("25R"));
await page.waitForFunction(
`${getQuerySelector("28R")}.value === "12300"`
);
})
);
});
});
});

View file

@ -660,3 +660,4 @@
!issue18099_reduced.pdf
!file_pdfjs_test.pdf
!issue18536.pdf
!issue18561.pdf

BIN
test/pdfs/issue18561.pdf Executable file

Binary file not shown.