From 91fc643ff975bf6b8384f9f0cc8325556280760e Mon Sep 17 00:00:00 2001 From: Jane-Kotovich Date: Tue, 26 Oct 2021 00:09:26 +1000 Subject: [PATCH] [api-minor] Implement securityHandler in the scripting API (bug 1731578) --- src/core/crypto.js | 1 + src/core/document.js | 3 +++ src/scripting_api/doc.js | 3 ++- test/integration/scripting_spec.js | 22 ++++++++++++++++++++++ test/pdfs/.gitignore | 1 + test/pdfs/secHandler.pdf | Bin 0 -> 7801 bytes test/unit/api_spec.js | 3 +++ 7 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 test/pdfs/secHandler.pdf diff --git a/src/core/crypto.js b/src/core/crypto.js index 4074aa634..d76b6f483 100644 --- a/src/core/crypto.js +++ b/src/core/crypto.js @@ -1689,6 +1689,7 @@ const CipherTransformFactory = (function CipherTransformFactoryClosure() { if (!isName(filter, "Standard")) { throw new FormatError("unknown encryption method"); } + this.filterName = filter.name; this.dict = dict; const algorithm = dict.get("V"); if ( diff --git a/src/core/document.js b/src/core/document.js index 61f630b66..bbe3fc836 100644 --- a/src/core/document.js +++ b/src/core/document.js @@ -1161,6 +1161,9 @@ class PDFDocument { const docInfo = { PDFFormatVersion: version, Language: this.catalog.lang, + EncryptFilterName: this.xref.encrypt + ? this.xref.encrypt.filterName + : null, IsLinearized: !!this.linearization, IsAcroFormPresent: this.formInfo.hasAcroForm, IsXFAPresent: this.formInfo.hasXfa, diff --git a/src/scripting_api/doc.js b/src/scripting_api/doc.js index c3ca6e226..905f9cfec 100644 --- a/src/scripting_api/doc.js +++ b/src/scripting_api/doc.js @@ -66,6 +66,7 @@ class Doc extends PDFObject { this._numPages = data.numPages || 1; this._pageNum = data.pageNum || 0; this._producer = data.Producer || ""; + this._securityHandler = data.EncryptFilterName || null; this._subject = data.Subject || ""; this._title = data.Title || ""; this._URL = data.URL || ""; @@ -522,7 +523,7 @@ class Doc extends PDFObject { } get securityHandler() { - return null; + return this._securityHandler; } set securityHandler(_) { diff --git a/test/integration/scripting_spec.js b/test/integration/scripting_spec.js index 31ff21010..d3da48d67 100644 --- a/test/integration/scripting_spec.js +++ b/test/integration/scripting_spec.js @@ -896,4 +896,26 @@ describe("Interaction", () => { ); }); }); + + describe("in secHandler.pdf", () => { + let pages; + + beforeAll(async () => { + pages = await loadAndWait("secHandler.pdf", "#\\32 5R"); + }); + + afterAll(async () => { + await closePages(pages); + }); + it("must print securityHandler value in a text field", async () => { + await Promise.all( + pages.map(async ([browserName, page]) => { + const text = await actAndWaitForInput(page, "#\\32 5R", async () => { + await page.click("[data-annotation-id='26R']"); + }); + expect(text).withContext(`In ${browserName}`).toEqual("Standard"); + }) + ); + }); + }); }); diff --git a/test/pdfs/.gitignore b/test/pdfs/.gitignore index 5c84ef99c..460399ac5 100644 --- a/test/pdfs/.gitignore +++ b/test/pdfs/.gitignore @@ -477,3 +477,4 @@ !issue12337.pdf !pr12564.pdf !pr12828.pdf +!secHandler.pdf diff --git a/test/pdfs/secHandler.pdf b/test/pdfs/secHandler.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0c761455fa753c38478051ab3ef7e1f53b1247ce GIT binary patch literal 7801 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 HQTe|B