From 43a729b1f916eb1e22b98fdf3e07ce9dc0d279ea Mon Sep 17 00:00:00 2001 From: El RIDO Date: Fri, 3 Apr 2026 18:15:54 +0200 Subject: [PATCH] updating zlib to 1.3.2 --- CHANGELOG.md | 2 +- js/common.js | 2 +- js/zlib-1.3.1.wasm | Bin 58827 -> 0 bytes js/zlib-1.3.2.mjs | 2 ++ js/zlib-1.3.2.wasm | Bin 0 -> 59620 bytes js/{zlib-1.3.1-2.js => zlib.js} | 60 ++++++++++---------------------- lib/Configuration.php | 3 +- lib/View.php | 53 ++++++++++++++++++++++++---- tpl/bootstrap.php | 3 +- tpl/bootstrap5.php | 3 +- tst/Bootstrap.php | 2 +- 11 files changed, 75 insertions(+), 55 deletions(-) delete mode 100644 js/zlib-1.3.1.wasm create mode 100644 js/zlib-1.3.2.mjs create mode 100644 js/zlib-1.3.2.wasm rename js/{zlib-1.3.1-2.js => zlib.js} (58%) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae352128..af2026dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ * ADDED: Translations for Swedish & Persian * CHANGED: Deduplicate JSON error message translations * CHANGED: Refactored translation of exception messages -* CHANGED: Upgrading libraries to: DOMpurify 3.3.2, ip-lib 1.22.0 & polyfill-php80 1.33.0 +* CHANGED: Upgrading libraries to: DOMpurify 3.3.2, ip-lib 1.22.0, polyfill-php80 1.33.0 & zlib 1.3.2 * FIXED: Some exceptions not getting translated * FIXED: Attachment disappears after a "paste" in the message area (#1731) * FIXED: The content format is not reset when creating a new document (#1707) diff --git a/js/common.js b/js/common.js index 36b5cdaa..c360eef4 100644 --- a/js/common.js +++ b/js/common.js @@ -10,7 +10,7 @@ global.WebCrypto = require('@peculiar/webcrypto').Crypto; // application libraries to test global.$ = global.jQuery = require('./jquery-3.7.1'); -global.zlib = require('./zlib-1.3.1-2').zlib; +global.zlib = require('./zlib').zlib; require('./prettify'); global.prettyPrint = window.PR.prettyPrint; global.prettyPrintOne = window.PR.prettyPrintOne; diff --git a/js/zlib-1.3.1.wasm b/js/zlib-1.3.1.wasm deleted file mode 100644 index 2fbc9169aa9773114c878399fddd11eb94890301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58827 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 toThrow};var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("node:fs");if(_scriptName.startsWith("file:")){scriptDirectory=require("node:path").dirname(require("node:url").fileURLToPath(_scriptName))+"/"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith("file://");var readyPromiseResolve,readyPromiseReject;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["d"]()}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("zlib.wasm")}return new URL("zlib.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={a:wasmImports};return imports}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(inst,mod)=>{resolve(receiveInstance(inst,mod))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}function writeToJs(ptr,dst,size){const o=Module.map[ptr];if(o&&typeof o.onData==="function"){o.onData(Module.HEAPU8.subarray(dst,dst+size))}else{console.error("No handler found for pointer:",ptr)}}var __malloc,__free,__createDeflateContext,__deflate,__freeDeflateContext,__createInflateContext,__inflate,__freeInflateContext,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){__malloc=Module["__malloc"]=wasmExports["e"];__free=Module["__free"]=wasmExports["f"];__createDeflateContext=Module["__createDeflateContext"]=wasmExports["g"];__deflate=Module["__deflate"]=wasmExports["h"];__freeDeflateContext=Module["__freeDeflateContext"]=wasmExports["i"];__createInflateContext=Module["__createInflateContext"]=wasmExports["j"];__inflate=Module["__inflate"]=wasmExports["k"];__freeInflateContext=Module["__freeInflateContext"]=wasmExports["l"];memory=wasmMemory=wasmExports["c"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={b:_emscripten_resize_heap,a:writeToJs};function run(){preRun();function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}var wasmExports;wasmExports=await (createWasm());run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})} +;return moduleRtn}export default Module; diff --git a/js/zlib-1.3.2.wasm b/js/zlib-1.3.2.wasm new file mode 100644 index 0000000000000000000000000000000000000000..7c5b06747248ce43fd5c2740b39a4d676a7cfa0e GIT binary patch literal 59620 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 literal 0 HcmV?d00001 diff --git a/js/zlib-1.3.1-2.js b/js/zlib.js similarity index 58% rename from js/zlib-1.3.1-2.js rename to js/zlib.js index 3e38c3ea..c59b620b 100644 --- a/js/zlib-1.3.1-2.js +++ b/js/zlib.js @@ -9,37 +9,22 @@ const COMPRESSION_LEVEL = 7; const NO_ZLIB_HEADER = -1; const CHUNK_SIZE = 32 * 1024; - const map = {}; - const memory = new WebAssembly.Memory({ - initial: 1, - maximum: 1024, // 64MB - }); - const env = { - memory, - writeToJs(ptr, size) { - const o = map[ptr]; - o.onData(new Uint8Array(memory.buffer, dstPtr, size)); - }, - _abort: errno => { console.error(`Error: ${errno}`) }, - _grow: () => { }, - }; - const ins = (await WebAssembly.instantiateStreaming(fetch('js/zlib-1.3.1.wasm'), { env })).instance; - - const srcPtr = ins.exports._malloc(CHUNK_SIZE); - const dstPtr = ins.exports._malloc(CHUNK_SIZE); + const Module = await import('zlib-1.3.2.mjs'); + Module.map = {}; + const srcPtr = Module.__malloc(CHUNK_SIZE); + const dstPtr = Module.__malloc(CHUNK_SIZE); class RawDef { constructor() { - this.zstreamPtr = ins.exports._createDeflateContext(COMPRESSION_LEVEL, NO_ZLIB_HEADER); - map[this.zstreamPtr] = this; + this.zstreamPtr = Module.__createDeflateContext(COMPRESSION_LEVEL, NO_ZLIB_HEADER); + Module.map[this.zstreamPtr] = this; this.offset = 0; this.buff = new Uint8Array(CHUNK_SIZE); } deflate(chunk, flush) { - const src = new Uint8Array(memory.buffer, srcPtr, chunk.length); - src.set(chunk); - ins.exports._deflate(this.zstreamPtr, srcPtr, dstPtr, chunk.length, CHUNK_SIZE, flush); + Module.HEAPU8.set(chunk, srcPtr); + Module.__deflate(this.zstreamPtr, srcPtr, dstPtr, chunk.length, CHUNK_SIZE, flush); } onData(chunk) { @@ -53,32 +38,27 @@ } destroy() { - ins.exports._freeDeflateContext(this.zstreamPtr); - delete map[this.zstreamPtr]; + Module.__freeDeflateContext(this.zstreamPtr); + delete Module.map[this.zstreamPtr]; this.buff = null; } getBuffer() { - const res = new Uint8Array(this.offset); - for (let i = 0; i < this.offset; ++i) { - res[i] = this.buff[i]; - } - return res; + return Buffer.from(this.buff.buffer, 0, this.offset); } } class RawInf { constructor() { - this.zstreamPtr = ins.exports._createInflateContext(NO_ZLIB_HEADER); - map[this.zstreamPtr] = this; + this.zstreamPtr = Module.__createInflateContext(NO_ZLIB_HEADER); + Module.map[this.zstreamPtr] = this; this.offset = 0; this.buff = new Uint8Array(CHUNK_SIZE); } inflate(chunk) { - const src = new Uint8Array(memory.buffer, srcPtr, chunk.length); - src.set(chunk); - ins.exports._inflate(this.zstreamPtr, srcPtr, dstPtr, chunk.length, CHUNK_SIZE); + Module.HEAPU8.set(chunk, srcPtr); + Module.__inflate(this.zstreamPtr, srcPtr, dstPtr, chunk.length, CHUNK_SIZE); } onData(chunk) { @@ -92,17 +72,13 @@ } destroy() { - ins.exports._freeInflateContext(this.zstreamPtr); - delete map[this.zstreamPtr]; + Module.__freeInflateContext(this.zstreamPtr); + delete Module.map[this.zstreamPtr]; this.buff = null; } getBuffer() { - const res = new Uint8Array(this.offset); - for (let i = 0; i < this.offset; ++i) { - res[i] = this.buff[i]; - } - return res; + return Buffer.from(this.buff.buffer, 0, this.offset); } } diff --git a/lib/Configuration.php b/lib/Configuration.php index 950cf069..1395048b 100644 --- a/lib/Configuration.php +++ b/lib/Configuration.php @@ -125,7 +125,8 @@ class Configuration 'js/privatebin.js' => 'sha512-6SwOJniNN8RBmAK7yCt4ly2qYyH8OALxB74/K1AJgw+YnZgRCfTDVq1qY1K5Y2QCxCODGGTpAjTqQRExzCqV7g==', 'js/purify-3.3.2.js' => 'sha512-I6igPVpf3xNghG92mujwqB6Zi3LpUTsni4bRuLnMThEGH6BDbsumv7373+AXHzA4OUlxGsym8ZxKFHy4xjYvkQ==', 'js/showdown-2.1.0.js' => 'sha512-WYXZgkTR0u/Y9SVIA4nTTOih0kXMEd8RRV6MLFdL6YU8ymhR528NLlYQt1nlJQbYz4EW+ZsS0fx1awhiQJme1Q==', - 'js/zlib-1.3.1-2.js' => 'sha512-4gT+v+BkBqdVBbKOO4qKGOAzuay+v1FmOLksS+bMgQ08Oo4xEb3X48Xq1Kv2b4HtiCQA7xq9dFRzxal7jmQI7w==', + 'js/zlib-1.3.2.mjs' => 'sha512-rv8vIHS886FB1BwNSDK2ePuAlQ2kjuCKyKfu6R6xrUaBW74XJwUkgBkYwb2Qo48JGcfenzJuJWnj7aunxXkyIw==', + 'js/zlib.js' => 'sha512-WrCFRc7+7FdFDhN86LQ0g8GHzwhGIqPJ29NBGu2xM3cqkCC9GSMZf/24dhg6+iQs1xjcnWjandBFIOP7xCBUpg==', ), ); diff --git a/lib/View.php b/lib/View.php index 514ac2b1..14b3d852 100644 --- a/lib/View.php +++ b/lib/View.php @@ -62,6 +62,49 @@ class View include $path; } + /** + * get cache buster query string + * + * if the file isn't versioned (ends in a digit), adds our own version as a query string + * + * @access private + * @param string $file + */ + private function _getCacheBuster($file) + { + // + if ((bool) preg_match('#[0-9]\.m?js$#', (string) $file)) { + return ''; + } + return '?' . rawurlencode($this->_variables['VERSION']); + } + + /** + * get SRI hash for given file + * + * @access private + * @param string $file + */ + private function _getSri($file) + { + if (array_key_exists($file, $this->_variables['SRI'])) { + return ' integrity="' . $this->_variables['SRI'][$file] . '"'; + } + return ''; + } + + /** + * echo module preload link tag incl. SRI hash for given script file + * + * @access private + * @param string $file + */ + private function _linkTag($file) + { + echo '_getSri($file), ' />', PHP_EOL; + } + /** * echo script tag incl. SRI hash for given script file * @@ -71,13 +114,9 @@ class View */ private function _scriptTag($file, $attributes = '') { - $sri = array_key_exists($file, $this->_variables['SRI']) ? - ' integrity="' . $this->_variables['SRI'][$file] . '"' : ''; - // if the file isn't versioned (ends in a digit), add our own version - $cacheBuster = (bool) preg_match('#[0-9]\.js$#', (string) $file) ? - '' : '?' . rawurlencode($this->_variables['VERSION']); echo '', PHP_EOL; + ' type="text/javascript" data-cfasync="false" src="', $file, + $this->_getCacheBuster($file), '"', $this->_getSri($file), + ' crossorigin="anonymous">', PHP_EOL; } } diff --git a/tpl/bootstrap.php b/tpl/bootstrap.php index 283c84ab..64b1eae9 100644 --- a/tpl/bootstrap.php +++ b/tpl/bootstrap.php @@ -42,6 +42,7 @@ if ($SYNTAXHIGHLIGHTING) : endif; ?> + _linkTag('js/zlib-1.3.2.mjs'); ?> _scriptTag('js/jquery-3.7.1.js', 'defer'); ?> - _scriptTag('js/zlib-1.3.1-2.js', 'defer'); ?> + _scriptTag('js/zlib.js', 'defer'); ?> _scriptTag('js/base-x-5.0.1.js', 'defer'); ?> _scriptTag('js/bootstrap-3.4.1.js', 'defer'); ?> + _linkTag('js/zlib-1.3.2.mjs'); ?> _scriptTag('js/jquery-3.7.1.js', 'defer'); ?> - _scriptTag('js/zlib-1.3.1-2.js', 'defer'); ?> + _scriptTag('js/zlib.js', 'defer'); ?> _scriptTag('js/base-x-5.0.1.js', 'defer'); ?> _scriptTag('js/bootstrap-5.3.8.js', 'defer'); ?> _scriptTag('js/dark-mode-switch.js', 'defer'); ?> diff --git a/tst/Bootstrap.php b/tst/Bootstrap.php index ea83e791..0c24da89 100644 --- a/tst/Bootstrap.php +++ b/tst/Bootstrap.php @@ -341,7 +341,7 @@ class Helper */ public static function updateSubresourceIntegrity(): void { - foreach (new GlobIterator(PATH . 'js' . DIRECTORY_SEPARATOR . '*.js') as $file) { + foreach (new GlobIterator(PATH . 'js' . DIRECTORY_SEPARATOR . '*.*js') as $file) { if ($file->getBasename() === 'common.js' || $file->getBasename() === 'eslint.config.js') { continue; // ignore JS unit test bootstrap }