From dad6febc393042f1612058384504844447e2f8fd Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Fri, 4 Apr 2025 13:36:13 +0200 Subject: [PATCH] Pass the /Info-strings as a `Map` to the `src/core/writer.js` code We want to iterate through the data in the `computeMD5` function, and `Map`s have "nicer" support for that than generic objects. (Somewhat recently `Map` performance was improved in Firefox, however this also isn't really performance sensitive code.) --- src/core/worker.js | 6 +++--- src/core/writer.js | 2 +- test/unit/writer_spec.js | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/core/worker.js b/src/core/worker.js index 63261bb00..25dd08ee0 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -674,12 +674,12 @@ class WorkerMessageHandler { let newXrefInfo = Object.create(null); if (xref.trailer) { // Get string info from Info in order to compute fileId. - const infoObj = Object.create(null); + const infoMap = new Map(); const xrefInfo = xref.trailer.get("Info") || null; if (xrefInfo instanceof Dict) { for (const [key, value] of xrefInfo) { if (typeof value === "string") { - infoObj[key] = stringToPDFString(value); + infoMap.set(key, stringToPDFString(value)); } } } @@ -689,7 +689,7 @@ class WorkerMessageHandler { encryptRef: xref.trailer.getRaw("Encrypt") || null, newRef: xref.getNewTemporaryRef(), infoRef: xref.trailer.getRaw("Info") || null, - info: infoObj, + infoMap, fileIds: xref.trailer.get("ID") || null, startXRef: linearization ? startXRef diff --git a/src/core/writer.js b/src/core/writer.js index bdeb8d0d6..40a06483f 100644 --- a/src/core/writer.js +++ b/src/core/writer.js @@ -182,7 +182,7 @@ function computeMD5(filesize, xrefInfo) { time.toString(), filename, filesize.toString(), - ...Object.values(xrefInfo.info), + ...xrefInfo.infoMap.values(), ]; const md5BufferLen = Math.sumPrecise(md5Buffer.map(str => str.length)); diff --git a/test/unit/writer_spec.js b/test/unit/writer_spec.js index 54f007605..15866ee14 100644 --- a/test/unit/writer_spec.js +++ b/test/unit/writer_spec.js @@ -42,7 +42,7 @@ describe("Writer", function () { infoRef: null, encryptRef: null, filename: "foo.pdf", - info: {}, + infoMap: new Map(), }; let data = await incrementalUpdate({ @@ -111,7 +111,7 @@ describe("Writer", function () { infoRef: null, encryptRef: null, filename: "foo.pdf", - info: {}, + infoMap: new Map(), }; let data = await incrementalUpdate({ @@ -218,7 +218,7 @@ describe("Writer", function () { infoRef: null, encryptRef: null, filename: "foo.pdf", - info: {}, + infoMap: new Map(), }; let data = await incrementalUpdate({ @@ -272,7 +272,7 @@ describe("Writer", function () { infoRef: null, encryptRef: null, filename: "foo.pdf", - info: {}, + infoMap: new Map(), }; let data = await incrementalUpdate({