@zip.js/zip.js 2.14.1 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BENCHMARKS.md +19 -11
- package/deno.json +1 -1
- package/dist/zip-core-external.js +82 -41
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +82 -41
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +82 -41
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +82 -41
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +82 -41
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +84 -43
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +84 -43
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +84 -43
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +84 -43
- package/dist/zip-native.min.js +1 -1
- package/dist/zip-web-worker-native.js +1 -1
- package/dist/zip-web-worker.js +1 -1
- package/dist/zip.js +84 -43
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +84 -43
- package/index-native.min.js +1 -1
- package/index.cjs +84 -43
- package/index.d.cts +20 -13
- package/index.d.ts +20 -13
- package/index.min.js +1 -1
- package/lib/core/codec-pool.js +35 -19
- package/lib/core/codec-worker.js +4 -2
- package/lib/core/streams/zip-entry-stream.js +18 -10
- package/lib/core/util/decode-text.js +15 -1
- package/lib/core/version.js +1 -1
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/web-worker-inline-wasm.js +1 -1
- package/lib/core/zip-reader.js +12 -10
- package/lib/core/zlib-streams-inline.js +1 -1
- package/package.json +1 -1
package/index-native.cjs
CHANGED
|
@@ -439,7 +439,7 @@ function resetConfiguration() {
|
|
|
439
439
|
Object.assign(config, DEFAULT_CONFIGURATION);
|
|
440
440
|
}
|
|
441
441
|
|
|
442
|
-
const t=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],n=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],r=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],e=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],o=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],u=new Uint8Array(288);u.fill(8,0,144),u.fill(9,144,256),u.fill(7,256,280),u.fill(8,280,288);const s=new Uint8Array(30).fill(5);function c(t){const n=new Uint16Array(16);for(const r of t)n[r]++;n[0]=0;const r=new Uint16Array(17);for(let t=1;t<=15;t++)r[t+1]=r[t]+n[t];const e=new Uint16Array(t.length);for(let n=0;n<t.length;n++)t[n]&&(e[r[t[n]]++]=n);return {o:n,symbols:e}}const z$1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=(w=()=>function(z){let f=0,w=0,W=0,Y=new Uint8Array(1024),a=0,C=0;for(;!C;){C=i(1);const t=i(2);if(0==t)d();else if(1==t)K(c(u),c(s));else {if(2!=t)throw new Error("invalid deflate block type");K(...U());}}return Y.subarray(0,a);function Z(){if(f>=z.length)throw new Error("unexpected end of deflate data");return z[f++]}function i(t){for(;W<t;)w|=Z()<<W,W+=8;const n=w&(1<<t)-1;return w>>>=t,W-=t,n}function d(){w=0,W=0;const t=Z()|Z()<<8;f+=2,l(a+t);for(let n=0;n<t;n++)Y[a++]=Z();}function K(o,u){let s=g(o);for(;256!=s;){if(s<256)l(a+1),Y[a++]=s;else {const o=s-257,c=t[o]+i(n[o]),z=g(u),f=r[z]+i(e[z]);l(a+c);const w=a-f;for(let t=0;t<c;t++)Y[a++]=Y[w+t];}s=g(o);}}function U(){const t=i(5)+257,n=i(5)+1,r=i(4)+4,e=new Uint8Array(19);for(let t=0;t<r;t++)e[o[t]]=i(3);const u=c(e),s=new Uint8Array(t+n);let z=0;for(;z<s.length;){const t=g(u);if(t<16)s[z++]=t;else if(16==t){const t=s[z-1];let n=i(2)+3;for(;n--;)s[z++]=t;}else z+=17==t?i(3)+3:i(7)+11;}return [c(s.subarray(0,t)),c(s.subarray(t))]}function g(t){const{o:n,symbols:r}=t;let e=0,o=0,u=0;for(let t=1;t<=15;t++){e|=i(1);const s=n[t];if(e-o<s)return r[u+(e-o)];u+=s,o=o+s<<1,e<<=1;}throw new Error("invalid huffman code")}function l(t){if(Y.length<t){let n=2*Y.length;for(;n<t;)n*=2;const r=new Uint8Array(n);r.set(Y.subarray(0,a)),Y=r;}}}(function(t){const n=(t=String(t).replace(/[^A-Za-z0-9+/=]/g,"")).length,r=[];for(let e=0;e<n;e+=4){const n=z$1.indexOf(t[e])<<18|z$1.indexOf(t[e+1])<<12|(63&z$1.indexOf(t[e+2]))<<6|63&z$1.indexOf(t[e+3]);r.push(n>>16&255),"="!==t[e+2]&&r.push(n>>8&255),"="!==t[e+3]&&r.push(255&n);}return new Uint8Array(r)}("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")),t=>t({workerURI:t=>{const n="text/javascript";let r=w();if("string"==typeof r&&(r=(new TextEncoder).encode(r)),t){const t=new Blob([r],{type:n});return URL.createObjectURL(t)}return "data:"+n+";base64,"+function(t){let n="";const r=t.length;let e=0;for(;e+2<r;e+=3){const r=t[e]<<16|t[e+1]<<8|t[e+2];n+=z$1[r>>18&63]+z$1[r>>12&63]+z$1[r>>6&63]+z$1[63&r];}const o=r-e;if(1===o){const r=t[e]<<16;n+=z$1[r>>18&63]+z$1[r>>12&63]+"==";}else if(2===o){const r=t[e]<<16|t[e+1]<<8;n+=z$1[r>>18&63]+z$1[r>>12&63]+z$1[r>>6&63]+"=";}return n}(r)}}));var w;
|
|
442
|
+
const n=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258],r=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],c=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],t=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],s=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],e=new Uint8Array(288);e.fill(8,0,144),e.fill(9,144,256),e.fill(7,256,280),e.fill(8,280,288);const u=new Uint8Array(30).fill(5);function f(n){const r=new Uint16Array(16);for(const c of n)r[c]++;r[0]=0;const c=new Uint16Array(17);for(let n=1;n<=15;n++)c[n+1]=c[n]+r[n];const t=new Uint16Array(n.length);for(let r=0;r<n.length;r++)n[r]&&(t[c[n[r]]++]=r);return {lengthCounts:r,symbols:t}}const i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=(v=()=>function(i){let o=0,v=0,O=0,E=new Uint8Array(1024),l=0,C=0;for(;!C;){C=g(1);const n=g(2);if(0==n)B();else if(1==n)V(f(e),f(u));else {if(2!=n)throw new Error("invalid deflate block type");V(...L());}}return E.subarray(0,l);function W(){if(o>=i.length)throw new Error("unexpected end of deflate data");return i[o++]}function g(n){for(;O<n;)v|=W()<<O,O+=8;const r=v&(1<<n)-1;return v>>>=n,O-=n,r}function B(){v=0,O=0;const n=W()|W()<<8;o+=2,b(l+n);for(let r=0;r<n;r++)E[l++]=W();}function V(s,e){let u=a(s);for(;256!=u;){if(u<256)b(l+1),E[l++]=u;else {const s=u-257,f=n[s]+g(r[s]),i=a(e),o=c[i]+g(t[i]);b(l+f);const v=l-o;for(let n=0;n<f;n++)E[l++]=E[v+n];}u=a(s);}}function L(){const n=g(5)+257,r=g(5)+1,c=g(4)+4,t=new Uint8Array(19);for(let n=0;n<c;n++)t[s[n]]=g(3);const e=f(t),u=new Uint8Array(n+r);let i=0;for(;i<u.length;){const n=a(e);if(n<16)u[i++]=n;else if(16==n){const n=u[i-1];let r=g(2)+3;for(;r--;)u[i++]=n;}else i+=17==n?g(3)+3:g(7)+11;}return [f(u.subarray(0,n)),f(u.subarray(n))]}function a(n){const{lengthCounts:r,symbols:c}=n;let t=0,s=0,e=0;for(let n=1;n<=15;n++){t|=g(1);const u=r[n];if(t-s<u)return c[e+(t-s)];e+=u,s=s+u<<1,t<<=1;}throw new Error("invalid huffman code")}function b(n){if(E.length<n){let r=2*E.length;for(;r<n;)r*=2;const c=new Uint8Array(r);c.set(E.subarray(0,l)),E=c;}}}(function(n){const r=(n=String(n).replace(/[^A-Za-z0-9+/=]/g,"")).length,c=[];for(let t=0;t<r;t+=4){const r=i.indexOf(n[t])<<18|i.indexOf(n[t+1])<<12|(63&i.indexOf(n[t+2]))<<6|63&i.indexOf(n[t+3]);c.push(r>>16&255),"="!==n[t+2]&&c.push(r>>8&255),"="!==n[t+3]&&c.push(255&r);}return new Uint8Array(c)}("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")),n=>n({workerURI:n=>{const r="text/javascript";let c=v();if("string"==typeof c&&(c=(new TextEncoder).encode(c)),n){const n=new Blob([c],{type:r});return URL.createObjectURL(n)}return "data:"+r+";base64,"+function(n){let r="";const c=n.length;let t=0;for(;t+2<c;t+=3){const c=n[t]<<16|n[t+1]<<8|n[t+2];r+=i[c>>18&63]+i[c>>12&63]+i[c>>6&63]+i[63&c];}const s=c-t;if(1===s){const c=n[t]<<16;r+=i[c>>18&63]+i[c>>12&63]+"==";}else if(2===s){const c=n[t]<<16|n[t+1]<<8;r+=i[c>>18&63]+i[c>>12&63]+i[c>>6&63]+"=";}return r}(c)}}));var v;
|
|
443
443
|
|
|
444
444
|
/*
|
|
445
445
|
Copyright (c) 2026 Gildas Lormeau. All rights reserved.
|
|
@@ -1865,8 +1865,8 @@ class DeflateStream extends TransformStream {
|
|
|
1865
1865
|
let crc32Stream, encryptionStream, gzipCrc32Stream;
|
|
1866
1866
|
let readable = super.readable;
|
|
1867
1867
|
const codecStreams = format && getCodecStreams(format);
|
|
1868
|
-
const
|
|
1869
|
-
|
|
1868
|
+
const GzipCompressionStream = getGzipCompressionStream(useCompressionStream, CompressionStream, CompressionStreamFallback);
|
|
1869
|
+
const useGzipCrc32 = computeCrc32 && compressed && !deflate64 && !codecStreams && (!encrypted || zipCrypto) && Boolean(GzipCompressionStream);
|
|
1870
1870
|
if ((!encrypted || zipCrypto) && computeCrc32 && !useGzipCrc32) {
|
|
1871
1871
|
crc32Stream = new Crc32Stream();
|
|
1872
1872
|
readable = pipeThrough(readable, crc32Stream);
|
|
@@ -1876,7 +1876,7 @@ class DeflateStream extends TransformStream {
|
|
|
1876
1876
|
readable = pipeThroughBackpressured(readable, createCodecStream(codecStreams.CompressionStream, format, { level, chunkSize, compressionMethod, uncompressedSize: inputSize }));
|
|
1877
1877
|
} else if (useGzipCrc32) {
|
|
1878
1878
|
gzipCrc32Stream = new GzipToRawDeflateStream();
|
|
1879
|
-
readable = pipeThroughBackpressured(readable, new
|
|
1879
|
+
readable = pipeThroughBackpressured(readable, new GzipCompressionStream(FORMAT_GZIP, { level, chunkSize }));
|
|
1880
1880
|
readable = pipeThrough(readable, gzipCrc32Stream);
|
|
1881
1881
|
} else {
|
|
1882
1882
|
try {
|
|
@@ -1950,8 +1950,7 @@ class GzipToRawDeflateStream extends TransformStream {
|
|
|
1950
1950
|
}
|
|
1951
1951
|
}
|
|
1952
1952
|
|
|
1953
|
-
function pipeThroughGzipDecompressionStream(readable, gzipStream, outputSize) {
|
|
1954
|
-
const crc32 = new Crc32();
|
|
1953
|
+
function pipeThroughGzipDecompressionStream(readable, gzipStream, outputSize, crc32) {
|
|
1955
1954
|
let outputLength = 0;
|
|
1956
1955
|
let inputDone = false;
|
|
1957
1956
|
let watchdogTimeout;
|
|
@@ -2025,7 +2024,7 @@ class InflateStream extends TransformStream {
|
|
|
2025
2024
|
constructor(options, { chunkSize, DecompressionStreamFallback, DecompressionStream }) {
|
|
2026
2025
|
super({});
|
|
2027
2026
|
const { zipCrypto, encrypted, checkCrc32, crc32, compressed, useCompressionStream, deflate64, format, compressionMethod, rawBitFlag, outputSize } = options;
|
|
2028
|
-
let crc32Stream, decryptionStream;
|
|
2027
|
+
let crc32Stream, decryptionStream, gzipCrc32;
|
|
2029
2028
|
let readable = super.readable;
|
|
2030
2029
|
if (encrypted) {
|
|
2031
2030
|
if (zipCrypto) {
|
|
@@ -2052,19 +2051,20 @@ class InflateStream extends TransformStream {
|
|
|
2052
2051
|
} catch {
|
|
2053
2052
|
throw error;
|
|
2054
2053
|
}
|
|
2055
|
-
|
|
2054
|
+
gzipCrc32 = new Crc32();
|
|
2055
|
+
readable = pipeThroughGzipDecompressionStream(readable, gzipStream, outputSize, gzipCrc32);
|
|
2056
2056
|
}
|
|
2057
2057
|
}
|
|
2058
2058
|
readable = mapInflateStreamError(readable);
|
|
2059
2059
|
}
|
|
2060
|
-
if (checkCrc32) {
|
|
2060
|
+
if (checkCrc32 && !gzipCrc32) {
|
|
2061
2061
|
crc32Stream = new Crc32Stream();
|
|
2062
2062
|
readable = pipeThrough(readable, crc32Stream);
|
|
2063
2063
|
}
|
|
2064
2064
|
setReadable(this, readable, () => {
|
|
2065
2065
|
if (checkCrc32) {
|
|
2066
|
-
const
|
|
2067
|
-
if (crc32 !=
|
|
2066
|
+
const computedCrc32 = gzipCrc32 ? gzipCrc32.get() >>> 0 : new DataView(crc32Stream.value.buffer).getUint32(0, false);
|
|
2067
|
+
if (crc32 != computedCrc32) {
|
|
2068
2068
|
throw new Error(ERR_INVALID_CRC32);
|
|
2069
2069
|
}
|
|
2070
2070
|
}
|
|
@@ -2120,6 +2120,14 @@ function createCodecStream(CodecStreamClass, format, options) {
|
|
|
2120
2120
|
return new CodecStreamClass(format, options);
|
|
2121
2121
|
}
|
|
2122
2122
|
|
|
2123
|
+
function getGzipCompressionStream(useCompressionStream, CompressionStreamNative, CompressionStreamFallback) {
|
|
2124
|
+
if (useCompressionStream && CompressionStreamNative) {
|
|
2125
|
+
return CompressionStreamNative;
|
|
2126
|
+
} else if (CompressionStreamFallback && CompressionStreamFallback.requiresModule) {
|
|
2127
|
+
return CompressionStreamFallback;
|
|
2128
|
+
}
|
|
2129
|
+
}
|
|
2130
|
+
|
|
2123
2131
|
function pipeThroughCompressionStream(readable, useCompressionStream, options, CompressionStreamNative, CompressionStreamFallback) {
|
|
2124
2132
|
const Stream = useCompressionStream && CompressionStreamNative ?
|
|
2125
2133
|
CompressionStreamNative :
|
|
@@ -2488,10 +2496,12 @@ class CodecWorker {
|
|
|
2488
2496
|
workerData.terminated = true;
|
|
2489
2497
|
worker.terminate();
|
|
2490
2498
|
}
|
|
2491
|
-
terminateResolvers.forEach(resolve => resolve());
|
|
2492
2499
|
}
|
|
2493
2500
|
workerData.busy = false;
|
|
2494
|
-
onTaskFinished(workerData);
|
|
2501
|
+
const pendingTasks = onTaskFinished(workerData);
|
|
2502
|
+
if (terminateResolvers) {
|
|
2503
|
+
terminateResolvers.forEach(resolve => resolve(pendingTasks));
|
|
2504
|
+
}
|
|
2495
2505
|
}
|
|
2496
2506
|
}
|
|
2497
2507
|
});
|
|
@@ -3176,7 +3186,10 @@ async function runWorker(stream, workerOptions) {
|
|
|
3176
3186
|
|
|
3177
3187
|
function onTaskFinished(workerData) {
|
|
3178
3188
|
clearStarvationTimeout();
|
|
3179
|
-
if (
|
|
3189
|
+
if (workerData.terminated) {
|
|
3190
|
+
workerData.terminated = false;
|
|
3191
|
+
return runPendingRequestsInline();
|
|
3192
|
+
} else if (pendingRequests.length) {
|
|
3180
3193
|
const [{ resolve, stream, workerOptions }] = pendingRequests.splice(0, 1);
|
|
3181
3194
|
resolve(new CodecWorker(workerData, stream, workerOptions, onTaskFinished));
|
|
3182
3195
|
armStarvationTimeout();
|
|
@@ -3214,12 +3227,26 @@ function onWorkerStarvation() {
|
|
|
3214
3227
|
starvationTimeout = null;
|
|
3215
3228
|
if (pendingRequests.length) {
|
|
3216
3229
|
const [{ resolve, stream, workerOptions }] = pendingRequests.splice(0, 1);
|
|
3217
|
-
|
|
3218
|
-
resolve(new CodecWorker({}, stream, inlineWorkerOptions, onInlineTaskFinished));
|
|
3230
|
+
resolve(new CodecWorker({}, stream, getInlineWorkerOptions(workerOptions), onInlineTaskFinished));
|
|
3219
3231
|
armStarvationTimeout();
|
|
3220
3232
|
}
|
|
3221
3233
|
}
|
|
3222
3234
|
|
|
3235
|
+
function runPendingRequestsInline() {
|
|
3236
|
+
const tasks = pendingRequests.splice(0).map(({ resolve, stream, workerOptions }) => new Promise(resolveTask => {
|
|
3237
|
+
resolve(new CodecWorker({}, stream, getInlineWorkerOptions(workerOptions), () => {
|
|
3238
|
+
onInlineTaskFinished();
|
|
3239
|
+
resolveTask();
|
|
3240
|
+
}));
|
|
3241
|
+
}));
|
|
3242
|
+
clearStarvationTimeout();
|
|
3243
|
+
return Promise.all(tasks);
|
|
3244
|
+
}
|
|
3245
|
+
|
|
3246
|
+
function getInlineWorkerOptions(workerOptions) {
|
|
3247
|
+
return Object.assign({}, workerOptions, { useWebWorkers: false, workerURI: UNDEFINED_VALUE, createWorker: UNDEFINED_VALUE });
|
|
3248
|
+
}
|
|
3249
|
+
|
|
3223
3250
|
function onInlineTaskFinished() {
|
|
3224
3251
|
clearStarvationTimeout();
|
|
3225
3252
|
armStarvationTimeout();
|
|
@@ -3229,18 +3256,14 @@ function terminateWorker(workerData, workerOptions) {
|
|
|
3229
3256
|
const { config } = workerOptions;
|
|
3230
3257
|
const { terminateWorkerTimeout } = config;
|
|
3231
3258
|
if (Number.isFinite(terminateWorkerTimeout) && terminateWorkerTimeout >= 0) {
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
|
|
3238
|
-
|
|
3239
|
-
|
|
3240
|
-
// ignored
|
|
3241
|
-
}
|
|
3242
|
-
}, terminateWorkerTimeout);
|
|
3243
|
-
}
|
|
3259
|
+
workerData.terminateTimeout = setTimeout(async () => {
|
|
3260
|
+
pool = pool.filter(data => data != workerData);
|
|
3261
|
+
try {
|
|
3262
|
+
await workerData.terminate();
|
|
3263
|
+
} catch {
|
|
3264
|
+
// ignored
|
|
3265
|
+
}
|
|
3266
|
+
}, terminateWorkerTimeout);
|
|
3244
3267
|
}
|
|
3245
3268
|
}
|
|
3246
3269
|
|
|
@@ -3253,10 +3276,13 @@ function clearTerminateTimeout(workerData) {
|
|
|
3253
3276
|
}
|
|
3254
3277
|
|
|
3255
3278
|
async function terminateWorkers() {
|
|
3256
|
-
await Promise.allSettled(
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3279
|
+
await Promise.allSettled([
|
|
3280
|
+
runPendingRequestsInline(),
|
|
3281
|
+
...pool.map(workerData => {
|
|
3282
|
+
clearTerminateTimeout(workerData);
|
|
3283
|
+
return workerData.terminate();
|
|
3284
|
+
})
|
|
3285
|
+
]);
|
|
3260
3286
|
resetWebWorkerSupport();
|
|
3261
3287
|
}
|
|
3262
3288
|
|
|
@@ -3331,6 +3357,19 @@ function decodeText(value, encoding) {
|
|
|
3331
3357
|
return decode(value, encoding, true);
|
|
3332
3358
|
}
|
|
3333
3359
|
|
|
3360
|
+
function isUTF8Text(value) {
|
|
3361
|
+
if (value.some(byte => byte > 0x7f)) {
|
|
3362
|
+
try {
|
|
3363
|
+
new TextDecoder("utf-8", { fatal: true }).decode(value);
|
|
3364
|
+
return true;
|
|
3365
|
+
} catch {
|
|
3366
|
+
return false;
|
|
3367
|
+
}
|
|
3368
|
+
} else {
|
|
3369
|
+
return false;
|
|
3370
|
+
}
|
|
3371
|
+
}
|
|
3372
|
+
|
|
3334
3373
|
function decodeTextRemovingBOM(value, encoding) {
|
|
3335
3374
|
return decode(value, encoding, false);
|
|
3336
3375
|
}
|
|
@@ -4640,6 +4679,7 @@ const WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = "mismatched loca
|
|
|
4640
4679
|
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = "mismatched local file header (crc32 or sizes)";
|
|
4641
4680
|
const MAX_KNOWN_VERSION = 63;
|
|
4642
4681
|
const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
|
|
4682
|
+
const PARENT_DIRECTORY_REGEXP = /(^|[\\/])\.\.([\\/]|$)/;
|
|
4643
4683
|
const CHARSET_UTF8 = "utf-8";
|
|
4644
4684
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
4645
4685
|
const CHARSET_CP437 = "cp437";
|
|
@@ -4892,12 +4932,13 @@ class ZipReader {
|
|
|
4892
4932
|
const versionMadeBy = getUint16$1(directoryView, offset + 4);
|
|
4893
4933
|
const msDosCompatible = versionMadeBy >> 8 == 0;
|
|
4894
4934
|
const unixCompatible = versionMadeBy >> 8 == 3;
|
|
4895
|
-
const rawFilename = directoryArray.subarray(filenameOffset, extraFieldOffset);
|
|
4896
4935
|
const commentLength = getUint16$1(directoryView, offset + 32);
|
|
4897
4936
|
const endOffset = commentOffset + commentLength;
|
|
4898
|
-
const
|
|
4899
|
-
const
|
|
4900
|
-
const
|
|
4937
|
+
const rawEntryData = new Uint8Array(directoryArray.subarray(filenameOffset, endOffset));
|
|
4938
|
+
const rawFilename = rawEntryData.subarray(0, fileEntry.filenameLength);
|
|
4939
|
+
const rawComment = rawEntryData.subarray(fileEntry.filenameLength + fileEntry.extraFieldLength);
|
|
4940
|
+
const filenameUTF8 = languageEncodingFlag || (!filenameEncoding && isUTF8Text(rawFilename));
|
|
4941
|
+
const commentUTF8 = languageEncodingFlag || (!commentEncoding && isUTF8Text(rawComment));
|
|
4901
4942
|
const externalFileAttributes = getUint32$1(directoryView, offset + 38);
|
|
4902
4943
|
const msdosAttributesRaw = externalFileAttributes & MAX_8_BITS;
|
|
4903
4944
|
const msdosAttributes = {
|
|
@@ -4948,7 +4989,7 @@ class ZipReader {
|
|
|
4948
4989
|
rawFilename,
|
|
4949
4990
|
filenameUTF8,
|
|
4950
4991
|
commentUTF8,
|
|
4951
|
-
rawExtraField:
|
|
4992
|
+
rawExtraField: rawEntryData.subarray(fileEntry.filenameLength, fileEntry.filenameLength + fileEntry.extraFieldLength),
|
|
4952
4993
|
rawComment,
|
|
4953
4994
|
filename,
|
|
4954
4995
|
comment
|
|
@@ -5456,7 +5497,7 @@ function readDigitalSignature(signatureRecordArray) {
|
|
|
5456
5497
|
if (getUint32$1(signatureRecordView, 0) == DIGITAL_SIGNATURE_RECORD_SIGNATURE) {
|
|
5457
5498
|
const signatureDataLength = getUint16$1(signatureRecordView, 4);
|
|
5458
5499
|
if (6 + signatureDataLength <= signatureRecordArray.length) {
|
|
5459
|
-
return signatureRecordArray.subarray(6, 6 + signatureDataLength);
|
|
5500
|
+
return new Uint8Array(signatureRecordArray.subarray(6, 6 + signatureDataLength));
|
|
5460
5501
|
}
|
|
5461
5502
|
}
|
|
5462
5503
|
}
|
|
@@ -5979,10 +6020,10 @@ function isUnsafeFilename(filename, filenameValidation) {
|
|
|
5979
6020
|
if (pathParts.length > 1 && pathParts[pathParts.length - 1] === "") {
|
|
5980
6021
|
pathParts.pop();
|
|
5981
6022
|
}
|
|
5982
|
-
if (
|
|
6023
|
+
if (PARENT_DIRECTORY_REGEXP.test(filename) || filename.startsWith("/") || filename.startsWith("\\") || DRIVE_LETTER_REGEXP.test(filename)) {
|
|
5983
6024
|
return true;
|
|
5984
6025
|
}
|
|
5985
|
-
return filenameValidation == STRICTNESS_STRICT && (pathParts.includes(".") || pathParts.includes(""));
|
|
6026
|
+
return filenameValidation == STRICTNESS_STRICT && (pathParts.includes(".") || pathParts.includes("") || filename.includes("\0"));
|
|
5986
6027
|
}
|
|
5987
6028
|
|
|
5988
6029
|
function getMaxAppendedDataSize(maxAppendedDataSize, strictness) {
|
|
@@ -6068,7 +6109,7 @@ async function* scanEndOfCentralDirectory(reader, scanLength) {
|
|
|
6068
6109
|
}
|
|
6069
6110
|
|
|
6070
6111
|
function getEndOfCentralDirectoryInfo(scanArray, indexByte, offset) {
|
|
6071
|
-
return { offset, buffer: scanArray.
|
|
6112
|
+
return { offset, buffer: new Uint8Array(scanArray.subarray(indexByte, indexByte + END_OF_CENTRAL_DIR_LENGTH)).buffer };
|
|
6072
6113
|
}
|
|
6073
6114
|
|
|
6074
6115
|
async function getCentralDirectoryReachability(reader, view, anchoredOffset, indexByte, offset, size, remoteProbeBudget) {
|
|
@@ -8813,7 +8854,7 @@ function formatSupported(StreamClass, format) {
|
|
|
8813
8854
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
8814
8855
|
*/
|
|
8815
8856
|
|
|
8816
|
-
const VERSION = "2.
|
|
8857
|
+
const VERSION = "2.15.0";
|
|
8817
8858
|
|
|
8818
8859
|
/*
|
|
8819
8860
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -10750,7 +10791,7 @@ function decodeMimeTypes(data) {
|
|
|
10750
10791
|
*/
|
|
10751
10792
|
|
|
10752
10793
|
|
|
10753
|
-
|
|
10794
|
+
o(setDefaultConfiguration);
|
|
10754
10795
|
|
|
10755
10796
|
exports.BlobReader = BlobReader;
|
|
10756
10797
|
exports.BlobWriter = BlobWriter;
|