securityos/public/Program Files/jspaint/lib/pdf.js/build/pdf.sandbox.js

313 lines
617 KiB
JavaScript
Raw Normal View History

2024-09-06 15:32:35 +00:00
/**
* @licstart The following is the entire license notice for the
* Javascript code in this page
*
* Copyright 2021 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* @licend The above is the entire license notice for the
* Javascript code in this page
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define("pdfjs-dist/build/pdf.sandbox", [], factory);
else if(typeof exports === 'object')
exports["pdfjs-dist/build/pdf.sandbox"] = factory();
else
root["pdfjs-dist/build/pdf.sandbox"] = root.pdfjsSandbox = factory();
})(this, function() {
return /******/ (() => { // webpackBootstrap
/******/ "use strict";
/******/ var __webpack_modules__ = ([
/* 0 */,
/* 1 */
/***/ ((__unused_webpack_module, exports) => {
Object.defineProperty(exports, "__esModule", ({value:true}));exports.default=void 0;var Module=function(){var _scriptDir=typeof document!=='undefined'&&document.currentScript?document.currentScript.src:undefined;return function(Module){Module=Module||{};var b;b||(b=typeof Module!=='undefined'?Module:{});var h,n;b.ready=new Promise(function(a,c){h=a;n=c;});var q={},r;for(r in b)b.hasOwnProperty(r)&&(q[r]=b[r]);var t="";"undefined"!==typeof document&&document.currentScript&&(t=document.currentScript.src);_scriptDir&&(t=_scriptDir);0!==t.indexOf("blob:")?t=t.substr(0,t.lastIndexOf("/")+1):t="";var aa=b.print||console.log.bind(console),u=b.printErr||console.warn.bind(console);for(r in q)q.hasOwnProperty(r)&&(b[r]=q[r]);q=null;var v;b.wasmBinary&&(v=b.wasmBinary);var noExitRuntime;b.noExitRuntime&&(noExitRuntime=b.noExitRuntime);"object"!==typeof WebAssembly&&w("no native wasm support detected");var x,y=!1;function A(a){var c=b["_"+a];c||w("Assertion failed: Cannot call unknown function "+(a+", make sure it is exported"));return c;}function B(a,c,d,e){var f={string:function(l){var p=0;if(null!==l&&void 0!==l&&0!==l){var W=(l.length<<2)+1;p=C(W);D(l,E,p,W);}return p;},array:function(l){var p=C(l.length);F.set(l,p);return p;}},g=A(a),k=[];a=0;if(e)for(var m=0;m<e.length;m++){var z=f[d[m]];z?(0===a&&(a=G()),k[m]=z(e[m])):k[m]=e[m];}d=g.apply(null,k);d=function(l){return"string"===c?H(l):"boolean"===c?!!l:l;}(d);0!==a&&I(a);return d;}var J="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0;function ba(a,c,d){var e=c+d;for(d=c;a[d]&&!(d>=e);)++d;if(16<d-c&&a.subarray&&J)return J.decode(a.subarray(c,d));for(e="";c<d;){var f=a[c++];if(f&128){var g=a[c++]&63;if(192==(f&224))e+=String.fromCharCode((f&31)<<6|g);else{var k=a[c++]&63;f=224==(f&240)?(f&15)<<12|g<<6|k:(f&7)<<18|g<<12|k<<6|a[c++]&63;65536>f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023));}}else e+=String.fromCharCode(f);}return e;}function H(a){return a?ba(E,a,void 0):"";}function D(a,c,d,e){if(0<e){e=d+e-1;for(var f=0;f<a.length;++f){var g=a.charCodeAt(f);if(55296<=g&&57343>=g){var k=a.charCodeAt(++f);g=65536+((g&1023)<<10)|k&1023;}if(127>=g){if(d>=e)break;c[d++]=g;}else{if(2047>=g){if(d+1>=e)break;c[d++]=192|g>>6;}else{if(65535>=g){if(d+2>=e)break;c[d++]=224|g>>12;}else{if(d+3>=e)break;c[d++]=240|g>>18;c[d++]=128|g>>12&63;}c[d++]=128|g>>6&63;}c[d++]=128|g&63;}}c[d]=0;}}function ca(a){for(var c=0,d=0;d<a.length;++d){var e=a.charCodeAt(d);55296<=e&&57343>=e&&(e=65536+((e&1023)<<10)|a.charCodeAt(++d)&1023);127>=e?++c:c=2047>=e?c+2:65535>=e?c+3:c+4;}return c;}function da(a){var c=ca(a)+1,d=K(c);d&&D(a,F,d,c);return d;}var L,F,E,M,N=b.INITIAL_MEMORY||16777216;b.wasmMemory?x=b.wasmMemory:x=new WebAssembly.Memory({initial:N/65536,maximum:N/65536});x&&(L=x.buffer);N=L.byteLength;var O=L;L=O;b.HEAP8=F=new Int8Array(O);b.HEAP16=new Int16Array(O);b.HEAP32=M=new Int32Array(O);b.HEAPU8=E=new Uint8Array(O);b.HEAPU16=new Uint16Array(O);b.HEAPU32=new Uint32Array(O);b.HEAPF32=new Float32Array(O);b.HEAPF64=new Float64Array(O);var P,ea=[],fa=[],ha=[],ia=[];function ja(){var a=b.preRun.shift();ea.unshift(a);}var Q=0,R=null,S=null;b.preloadedImages={};b.preloadedAudios={};function w(a){if(b.onAbort)b.onAbort(a);u(a);y=!0;a=new WebAssembly.RuntimeError("abort("+a+"). Build with -s ASSERTIONS=1 for more info.");n(a);throw a;}function T(a){return String.prototype.startsWith?a.startsWith("data:application/octet-stream;base64,"):0===a.indexOf("data:application/octet-stream;base64,");}var U="data:application/octet-stream;base64,AGFzbQEAAAABmwd4YAN/f38Bf2ACf38Bf2AEf35/fwF+YAJ/fwBgAX8Bf2ADf39/AGAFf35/f38BfmABfwBgAn9+AX5gBH9/f38Bf2ACf34Bf2ABfAF8YAJ/fwF+YAJ/fgBgA39/fgF/YAF+AX9gA39+fwF+YAN/fn8AYAN/fn8Bf2AFf39/f38Bf2AGf35/f39/AX5gA39/fwF+YAN/fn4BfmAGf35+f39/AX5gBH9/fn8Bf2AGf39/f39/AX9gAX8BfmACfHwBfGAEf39/fwBgBH9/f38BfmADf35+AX9gBX9/f39/AGAFf35+fn4AYAd/f39/f39/AX9gBH9+fn8BfmAFf35+f38BfmABfgF+YAABf2AFf35/fn8Bf2AHf35/fn5+fwF/YAAAYAN/f34AYAN/fn4AYAR/fn5/AGAGf35/fn5/AX9gBH9+fn8Bf2AEf35+fgF/YAV/fn5+fwF/YAJ+fwF/YAR/fn9/AGAFf35+f38AYAJ+fwBgCX9/f39/f39/fwF/YAR/f
/***/ }),
/* 2 */
/***/ ((__unused_webpack_module, exports) => {
class SandboxSupportBase {
constructor(win) {
this.win = win;
this.timeoutIds = new Map();
this.commFun = null;
}
destroy() {
this.commFunc = null;
this.timeoutIds.forEach(([_, id]) => this.win.clearTimeout(id));
this.timeoutIds = null;
}
exportValueToSandbox(val) {
throw new Error("Not implemented");
}
importValueFromSandbox(val) {
throw new Error("Not implemented");
}
createErrorForSandbox(errorMessage) {
throw new Error("Not implemented");
}
callSandboxFunction(name, args) {
try {
args = this.exportValueToSandbox(args);
this.commFun(name, args);
} catch (e) {
this.win.console.error(e);
}
}
createSandboxExternals() {
const externals = {
setTimeout: (callbackId, nMilliseconds) => {
if (typeof callbackId !== "number" || typeof nMilliseconds !== "number") {
return;
}
const id = this.win.setTimeout(() => {
this.timeoutIds.delete(callbackId);
this.callSandboxFunction("timeoutCb", {
callbackId,
interval: false
});
}, nMilliseconds);
this.timeoutIds.set(callbackId, id);
},
clearTimeout: id => {
this.win.clearTimeout(this.timeoutIds.get(id));
this.timeoutIds.delete(id);
},
setInterval: (callbackId, nMilliseconds) => {
if (typeof callbackId !== "number" || typeof nMilliseconds !== "number") {
return;
}
const id = this.win.setInterval(() => {
this.callSandboxFunction("timeoutCb", {
callbackId,
interval: true
});
}, nMilliseconds);
this.timeoutIds.set(callbackId, id);
},
clearInterval: id => {
this.win.clearInterval(this.timeoutIds.get(id));
this.timeoutIds.delete(id);
},
alert: cMsg => {
if (typeof cMsg !== "string") {
return;
}
this.win.alert(cMsg);
},
prompt: (cQuestion, cDefault) => {
if (typeof cQuestion !== "string" || typeof cDefault !== "string") {
return null;
}
return this.win.prompt(cQuestion, cDefault);
},
parseURL: cUrl => {
const url = new this.win.URL(cUrl);
const props = ["hash", "host", "hostname", "href", "origin", "password", "pathname", "port", "protocol", "search", "searchParams", "username"];
return Object.fromEntries(props.map(name => [name, url[name].toString()]));
},
send: data => {
if (!data) {
return;
}
const event = new this.win.CustomEvent("updatefromsandbox", {
detail: this.importValueFromSandbox(data)
});
this.win.dispatchEvent(event);
}
};
Object.setPrototypeOf(externals, null);
return (name, args) => {
try {
const result = externals[name](...args);
return this.exportValueToSandbox(result);
} catch (error) {
throw this.createErrorForSandbox(error?.toString() ?? "");
}
};
}
}
{
exports.SandboxSupportBase = SandboxSupportBase;
}
/***/ })
/******/ ]);
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __w_pdfjs_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
(() => {
var exports = __webpack_exports__;
Object.defineProperty(exports, "__esModule", ({
value: true
}));
exports.QuickJSSandbox = QuickJSSandbox;
var _quickjsEval = _interopRequireDefault(__w_pdfjs_require__(1));
var _pdfSandboxExternal = __w_pdfjs_require__(2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const pdfjsVersion = '2.8.335';
const pdfjsBuild = '228adbf67';
const TESTING = false;
class SandboxSupport extends _pdfSandboxExternal.SandboxSupportBase {
exportValueToSandbox(val) {
return JSON.stringify(val);
}
importValueFromSandbox(val) {
return val;
}
createErrorForSandbox(errorMessage) {
return new Error(errorMessage);
}
}
class Sandbox {
constructor(win, module) {
this.support = new SandboxSupport(win, this);
module.externalCall = this.support.createSandboxExternals();
this._module = module;
this._alertOnError = 0;
}
create(data) {
if (TESTING) {
this._module.ccall("nukeSandbox", null, []);
}
const code = ['(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === \'object\' && typeof module === \'object\')\n\t\tmodule.exports = factory();\n\telse if(typeof define === \'function\' && define.amd)\n\t\tdefine("pdfjs-dist/build/pdf.scripting", [], factory);\n\telse if(typeof exports === \'object\')\n\t\texports["pdfjs-dist/build/pdf.scripting"] = factory();\n\telse\n\t\troot.pdfjsScripting = factory();\n})(this, function() {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t"use strict";\n/******/ \tvar __webpack_modules__ = ([\n/* 0 */,\n/* 1 */\n/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {\n\n\n\nObject.defineProperty(exports, "__esModule", ({\n value: true\n}));\nexports.initSandbox = initSandbox;\n\nvar _constants = __w_pdfjs_require__(2);\n\nvar _field = __w_pdfjs_require__(3);\n\nvar _aform = __w_pdfjs_require__(8);\n\nvar _app = __w_pdfjs_require__(9);\n\nvar _color = __w_pdfjs_require__(5);\n\nvar _console = __w_pdfjs_require__(13);\n\nvar _doc = __w_pdfjs_require__(14);\n\nvar _proxy = __w_pdfjs_require__(16);\n\nvar _util = __w_pdfjs_require__(17);\n\nfunction initSandbox(params) {\n delete globalThis.pdfjsScripting;\n const externalCall = globalThis.callExternalFunction;\n delete globalThis.callExternalFunction;\n\n const globalEval = code => globalThis.eval(code);\n\n const send = data => externalCall("send", [data]);\n\n const proxyHandler = new _proxy.ProxyHandler();\n const {\n data\n } = params;\n const doc = new _doc.Doc({\n send,\n globalEval,\n ...data.docInfo\n });\n const _document = {\n obj: doc,\n wrapped: new Proxy(doc, proxyHandler)\n };\n const app = new _app.App({\n send,\n globalEval,\n externalCall,\n _document,\n calculationOrder: data.calculationOrder,\n proxyHandler,\n ...data.appInfo\n });\n const util = new _util.Util({\n externalCall\n });\n const appObjects = app._objects;\n\n if (data.objects) {\n const annotations = [];\n\n for (const [name, objs] of Object.entries(data.objects)) {\n annotations.length = 0;\n let container = null;\n\n for (const obj of objs) {\n if (obj.type !== "") {\n annotations.push(obj);\n } else {\n container = obj;\n }\n }\n\n let obj = container;\n\n if (annotations.length > 0) {\n obj = annotations[0];\n obj.send = send;\n }\n\n obj.globalEval = globalEval;\n obj.doc = _document;\n obj.fieldPath = name;\n obj.appObjects = appObjects;\n let field;\n\n if (obj.type === "radiobutton") {\n const otherButtons = annotations.slice(1);\n field = new _field.RadioButtonField(otherButtons, obj);\n } else if (obj.type === "checkbox") {\n const otherButtons = annotations.slice(1);\n field = new _field.CheckboxField(otherButtons, obj);\n } else {\n field = new _field.Field(obj);\n }\n\n const wrapped = new Proxy(field, proxyHandler);\n\n doc._addField(name, wrapped);\n\n const _object = {\n obj: field,\n wrapped\n };\n\n for (const object of objs) {\n appObjects[object.id] = _object;\n }\n\n if (container) {\n appObjects[container.id] = _object;\n }\n }\n }\n\n const color = new _color.Color();\n globalThis.event = null;\n globalThis.global = Object.create(null);\n globalThis.app = new Proxy(app, proxyHandler);\n globalThis.color = new Proxy(color, proxyHandler);\n globalThis.console = new Proxy(new _console.Console({\n send\n }), proxyHandler);\n globalThis.util = new Proxy(util, proxyHandler);\n globalThis.border = _constants.Border;\n globalThis.cursor = _constants.Cursor;\n globalThis.display = _constants.Display;\n globalThis.font = _constants.Font;\n globalThis.highlight = _constants.Highlight;\n globalThis.position = _constants.Position;\n globalThis.scaleHow = _constants.ScaleHow;\n globalThis.scaleWhen = _constants.ScaleWhen;\n globalThis.style = _constants.Style;\n glob
if (!TESTING) {
code.push("delete dump;");
} else {
code.push(`globalThis.sendResultForTesting = callExternalFunction.bind(null, "send");`);
}
let success = false;
try {
const sandboxData = JSON.stringify(data);
code.push(`pdfjsScripting.initSandbox({ data: ${sandboxData} })`);
success = !!this._module.ccall("init", "number", ["string", "number"], [code.join("\n"), this._alertOnError]);
} catch (error) {
console.error(error);
}
if (success) {
this.support.commFun = this._module.cwrap("commFun", null, ["string", "string"]);
} else {
this.nukeSandbox();
throw new Error("Cannot start sandbox");
}
}
dispatchEvent(event) {
this.support.callSandboxFunction("dispatchEvent", event);
}
dumpMemoryUse() {
if (this._module) {
this._module.ccall("dumpMemoryUse", null, []);
}
}
nukeSandbox() {
if (this._module !== null) {
this.support.destroy();
this.support = null;
this._module.ccall("nukeSandbox", null, []);
this._module = null;
}
}
evalForTesting(code, key) {
if (TESTING) {
this._module.ccall("evalInSandbox", null, ["string", "int"], [`try {
sendResultForTesting([{ id: "${key}", result: ${code} }]);
} catch (error) {
sendResultForTesting([{ id: "${key}", result: error.message }]);
}`, this._alertOnError]);
}
}
}
function QuickJSSandbox() {
return (0, _quickjsEval.default)().then(module => {
return new Sandbox(window, module);
});
}
})();
/******/ return __webpack_exports__;
/******/ })()
;
});