@zip.js/zip.js 2.8.7 → 2.8.8
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/deno.json +1 -1
- package/dist/zip-core.js +407 -53
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core.js +406 -52
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-native.js +411 -57
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +407 -53
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +408 -54
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +411 -57
- package/dist/zip-native.min.js +1 -1
- package/dist/zip-web-worker-native.js +1 -1
- package/dist/zip.js +407 -53
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +411 -57
- package/index-native.min.js +1 -1
- package/index.cjs +407 -53
- package/index.d.ts +118 -2
- package/index.min.js +1 -1
- package/lib/core/constants.js +23 -1
- package/lib/core/io.js +19 -4
- package/lib/core/options.js +3 -1
- package/lib/core/streams/zlib-js/zlib-streams.min.js +1 -1
- package/lib/core/web-worker-inline-native.js +1 -1
- package/lib/core/zip-entry.js +75 -9
- package/lib/core/zip-reader.js +113 -29
- package/lib/core/zip-writer.js +230 -14
- package/package.json +4 -4
package/dist/zip-legacy.js
CHANGED
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
|
|
38
38
|
const MAX_32_BITS = 0xffffffff;
|
|
39
39
|
const MAX_16_BITS = 0xffff;
|
|
40
|
+
const MAX_8_BITS = 0xff;
|
|
40
41
|
const COMPRESSION_METHOD_DEFLATE = 0x08;
|
|
41
42
|
const COMPRESSION_METHOD_DEFLATE_64 = 0x09;
|
|
42
43
|
const COMPRESSION_METHOD_STORE = 0x00;
|
|
@@ -66,6 +67,8 @@
|
|
|
66
67
|
const EXTRAFIELD_TYPE_UNICODE_PATH = 0x7075;
|
|
67
68
|
const EXTRAFIELD_TYPE_UNICODE_COMMENT = 0x6375;
|
|
68
69
|
const EXTRAFIELD_TYPE_USDZ = 0x1986;
|
|
70
|
+
const EXTRAFIELD_TYPE_INFOZIP = 0x7875;
|
|
71
|
+
const EXTRAFIELD_TYPE_UNIX = 0x7855;
|
|
69
72
|
|
|
70
73
|
const BITFLAG_ENCRYPTED = 0b1;
|
|
71
74
|
const BITFLAG_LEVEL = 0b0110;
|
|
@@ -75,10 +78,17 @@
|
|
|
75
78
|
const BITFLAG_DATA_DESCRIPTOR = 0b1000;
|
|
76
79
|
const BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;
|
|
77
80
|
const FILE_ATTR_MSDOS_DIR_MASK = 0b10000;
|
|
81
|
+
const FILE_ATTR_MSDOS_READONLY_MASK = 0x01;
|
|
82
|
+
const FILE_ATTR_MSDOS_HIDDEN_MASK = 0x02;
|
|
83
|
+
const FILE_ATTR_MSDOS_SYSTEM_MASK = 0x04;
|
|
84
|
+
const FILE_ATTR_MSDOS_ARCHIVE_MASK = 0x20;
|
|
78
85
|
const FILE_ATTR_UNIX_TYPE_MASK = 0o170000;
|
|
79
86
|
const FILE_ATTR_UNIX_TYPE_DIR = 0o040000;
|
|
80
87
|
const FILE_ATTR_UNIX_EXECUTABLE_MASK = 0o111;
|
|
81
88
|
const FILE_ATTR_UNIX_DEFAULT_MASK = 0o644;
|
|
89
|
+
const FILE_ATTR_UNIX_SETUID_MASK = 0o4000;
|
|
90
|
+
const FILE_ATTR_UNIX_SETGID_MASK = 0o2000;
|
|
91
|
+
const FILE_ATTR_UNIX_STICKY_MASK = 0o1000;
|
|
82
92
|
|
|
83
93
|
const VERSION_DEFLATE = 0x14;
|
|
84
94
|
const VERSION_ZIP64 = 0x2D;
|
|
@@ -97,6 +107,7 @@
|
|
|
97
107
|
const UNDEFINED_VALUE = undefined;
|
|
98
108
|
const UNDEFINED_TYPE = "undefined";
|
|
99
109
|
const FUNCTION_TYPE = "function";
|
|
110
|
+
const OBJECT_TYPE = "object";
|
|
100
111
|
|
|
101
112
|
/*
|
|
102
113
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -193,7 +204,7 @@
|
|
|
193
204
|
}
|
|
194
205
|
}
|
|
195
206
|
|
|
196
|
-
const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g(g){let B;g({workerURI:()=>(B||(B="data:text/javascript;base64,"+(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let C=0;B>C;C+=4){const B=A.indexOf(g[C])<<18|A.indexOf(g[C+1])<<12|(63&A.indexOf(g[C+2]))<<6|63&A.indexOf(g[C+3]);I.push(B>>16&255),"="!==g[C+2]&&I.push(B>>8&255),"="!==g[C+3]&&I.push(255&B);}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const E=g[A++];if(128&E){const Q=3+(127&E),Y=g[A++]<<8|g[A++],F=I-Y;C(I+Q);for(let A=0;Q>A;A++)B[I++]=B[F+A];}else {const Q=E;C(I+Q);for(let C=0;Q>C&&A<g.length;C++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let C=0;for(;I>C+2;C+=3){const I=g[C]<<16|g[C+1]<<8|g[C+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const E=I-C;if(1===E){const I=g[C]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===E){const I=g[C]<<16|g[C+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"=";}return B})(new Uint8Array(B.buffer.slice(0,I)));function C(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const C=new Uint8Array(g);C.set(B.subarray(0,I)),B=C;}}})("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")),B)});}
|
|
207
|
+
const A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function g(g){let B;g({workerURI:()=>(B||(B="data:text/javascript;base64,"+(g=>{g=(g=>{const B=(g=(g+"").replace(/[^A-Za-z0-9+/=]/g,"")).length,I=[];for(let C=0;B>C;C+=4){const B=A.indexOf(g[C])<<18|A.indexOf(g[C+1])<<12|(63&A.indexOf(g[C+2]))<<6|63&A.indexOf(g[C+3]);I.push(B>>16&255),"="!==g[C+2]&&I.push(B>>8&255),"="!==g[C+3]&&I.push(255&B);}return new Uint8Array(I)})(g);let B=new Uint8Array(1024),I=0;for(let A=0;A<g.length;){const E=g[A++];if(128&E){const Q=3+(127&E),Y=g[A++]<<8|g[A++],F=I-Y;C(I+Q);for(let A=0;Q>A;A++)B[I++]=B[F+A];}else {const Q=E;C(I+Q);for(let C=0;Q>C&&A<g.length;C++)B[I++]=g[A++];}}return (g=>{let B="";const I=g.length;let C=0;for(;I>C+2;C+=3){const I=g[C]<<16|g[C+1]<<8|g[C+2];B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+A[63&I];}const E=I-C;if(1===E){const I=g[C]<<16;B+=A[I>>18&63]+A[I>>12&63]+"==";}else if(2===E){const I=g[C]<<16|g[C+1]<<8;B+=A[I>>18&63]+A[I>>12&63]+A[I>>6&63]+"=";}return B})(new Uint8Array(B.buffer.slice(0,I)));function C(A){if(B.length<A){let g=2*B.length;for(;A>g;)g*=2;const C=new Uint8Array(g);C.set(B.subarray(0,I)),B=C;}}})("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")),B)});}
|
|
197
208
|
|
|
198
209
|
/*
|
|
199
210
|
Copyright (c) 2022 Gildas Lormeau. All rights reserved.
|
|
@@ -2416,6 +2427,7 @@
|
|
|
2416
2427
|
const HTTP_METHOD_GET = "GET";
|
|
2417
2428
|
const HTTP_RANGE_UNIT = "bytes";
|
|
2418
2429
|
const DEFAULT_CHUNK_SIZE = 64 * 1024;
|
|
2430
|
+
const DEFAULT_BUFFER_SIZE = 256 * 1024;
|
|
2419
2431
|
|
|
2420
2432
|
const PROPERTY_NAME_WRITABLE = "writable";
|
|
2421
2433
|
|
|
@@ -2908,19 +2920,29 @@
|
|
|
2908
2920
|
|
|
2909
2921
|
class Uint8ArrayWriter extends Writer {
|
|
2910
2922
|
|
|
2923
|
+
constructor(defaultBufferSize) {
|
|
2924
|
+
super();
|
|
2925
|
+
this.defaultBufferSize = defaultBufferSize || DEFAULT_BUFFER_SIZE;
|
|
2926
|
+
}
|
|
2927
|
+
|
|
2911
2928
|
init(initSize = 0) {
|
|
2912
2929
|
Object.assign(this, {
|
|
2913
2930
|
offset: 0,
|
|
2914
|
-
array: new Uint8Array(initSize)
|
|
2931
|
+
array: new Uint8Array(initSize > 0 ? initSize : this.defaultBufferSize)
|
|
2915
2932
|
});
|
|
2916
2933
|
super.init();
|
|
2917
2934
|
}
|
|
2918
2935
|
|
|
2919
2936
|
writeUint8Array(array) {
|
|
2920
2937
|
const writer = this;
|
|
2921
|
-
|
|
2938
|
+
const requiredLength = writer.offset + array.length;
|
|
2939
|
+
if (requiredLength > writer.array.length) {
|
|
2940
|
+
let newLength = writer.array.length ? writer.array.length * 2 : writer.defaultBufferSize;
|
|
2941
|
+
while (newLength < requiredLength) {
|
|
2942
|
+
newLength *= 2;
|
|
2943
|
+
}
|
|
2922
2944
|
const previousArray = writer.array;
|
|
2923
|
-
writer.array = new Uint8Array(
|
|
2945
|
+
writer.array = new Uint8Array(newLength);
|
|
2924
2946
|
writer.array.set(previousArray);
|
|
2925
2947
|
}
|
|
2926
2948
|
writer.array.set(array, writer.offset);
|
|
@@ -2928,7 +2950,11 @@
|
|
|
2928
2950
|
}
|
|
2929
2951
|
|
|
2930
2952
|
getData() {
|
|
2931
|
-
|
|
2953
|
+
if (this.offset === this.array.length) {
|
|
2954
|
+
return this.array;
|
|
2955
|
+
} else {
|
|
2956
|
+
return this.array.slice(0, this.offset);
|
|
2957
|
+
}
|
|
2932
2958
|
}
|
|
2933
2959
|
}
|
|
2934
2960
|
|
|
@@ -3247,6 +3273,8 @@
|
|
|
3247
3273
|
const PROPERTY_NAME_RAW_CREATION_DATE = "rawCreationDate";
|
|
3248
3274
|
const PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES = "internalFileAttributes";
|
|
3249
3275
|
const PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES = "externalFileAttributes";
|
|
3276
|
+
const PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW = "msdosAttributesRaw";
|
|
3277
|
+
const PROPERTY_NAME_MSDOS_ATTRIBUTES = "msdosAttributes";
|
|
3250
3278
|
const PROPERTY_NAME_MS_DOS_COMPATIBLE = "msDosCompatible";
|
|
3251
3279
|
const PROPERTY_NAME_ZIP64 = "zip64";
|
|
3252
3280
|
const PROPERTY_NAME_ENCRYPTED = "encrypted";
|
|
@@ -3258,17 +3286,73 @@
|
|
|
3258
3286
|
const PROPERTY_NAME_COMPRESSION_METHOD = "compressionMethod";
|
|
3259
3287
|
const PROPERTY_NAME_SIGNATURE = "signature";
|
|
3260
3288
|
const PROPERTY_NAME_EXTRA_FIELD = "extraField";
|
|
3289
|
+
const PROPERTY_NAME_EXTRA_FIELD_INFOZIP = "extraFieldInfoZip";
|
|
3290
|
+
const PROPERTY_NAME_EXTRA_FIELD_UNIX = "extraFieldUnix";
|
|
3291
|
+
const PROPERTY_NAME_UID = "uid";
|
|
3292
|
+
const PROPERTY_NAME_GID = "gid";
|
|
3293
|
+
const PROPERTY_NAME_UNIX_MODE = "unixMode";
|
|
3294
|
+
const PROPERTY_NAME_SETUID = "setuid";
|
|
3295
|
+
const PROPERTY_NAME_SETGID = "setgid";
|
|
3296
|
+
const PROPERTY_NAME_STICKY = "sticky";
|
|
3297
|
+
const PROPERTY_NAME_BITFLAG = "bitFlag";
|
|
3298
|
+
const PROPERTY_NAME_FILENAME_UTF8 = "filenameUTF8";
|
|
3299
|
+
const PROPERTY_NAME_COMMENT_UTF8 = "commentUTF8";
|
|
3300
|
+
const PROPERTY_NAME_RAW_EXTRA_FIELD = "rawExtraField";
|
|
3301
|
+
const PROPERTY_NAME_EXTRA_FIELD_ZIP64 = "extraFieldZip64";
|
|
3302
|
+
const PROPERTY_NAME_EXTRA_FIELD_UNICODE_PATH = "extraFieldUnicodePath";
|
|
3303
|
+
const PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT = "extraFieldUnicodeComment";
|
|
3304
|
+
const PROPERTY_NAME_EXTRA_FIELD_AES = "extraFieldAES";
|
|
3305
|
+
const PROPERTY_NAME_EXTRA_FIELD_NTFS = "extraFieldNTFS";
|
|
3306
|
+
const PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP = "extraFieldExtendedTimestamp";
|
|
3261
3307
|
|
|
3262
3308
|
const PROPERTY_NAMES = [
|
|
3263
|
-
PROPERTY_NAME_FILENAME,
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3309
|
+
PROPERTY_NAME_FILENAME,
|
|
3310
|
+
PROPERTY_NAME_RAW_FILENAME,
|
|
3311
|
+
PROPERTY_NAME_UNCOMPRESSED_SIZE,
|
|
3312
|
+
PROPERTY_NAME_COMPRESSED_SIZE,
|
|
3313
|
+
PROPERTY_NAME_LAST_MODIFICATION_DATE,
|
|
3314
|
+
PROPERTY_NAME_RAW_LAST_MODIFICATION_DATE,
|
|
3315
|
+
PROPERTY_NAME_COMMENT,
|
|
3316
|
+
PROPERTY_NAME_RAW_COMMENT,
|
|
3317
|
+
PROPERTY_NAME_LAST_ACCESS_DATE,
|
|
3318
|
+
PROPERTY_NAME_CREATION_DATE,
|
|
3319
|
+
PROPERTY_NAME_RAW_CREATION_DATE,
|
|
3320
|
+
PROPERTY_NAME_OFFSET,
|
|
3321
|
+
PROPERTY_NAME_DISK_NUMBER_START,
|
|
3322
|
+
PROPERTY_NAME_INTERNAL_FILE_ATTRIBUTES,
|
|
3323
|
+
PROPERTY_NAME_EXTERNAL_FILE_ATTRIBUTES,
|
|
3324
|
+
PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW,
|
|
3325
|
+
PROPERTY_NAME_MSDOS_ATTRIBUTES,
|
|
3326
|
+
PROPERTY_NAME_MS_DOS_COMPATIBLE,
|
|
3327
|
+
PROPERTY_NAME_ZIP64,
|
|
3328
|
+
PROPERTY_NAME_ENCRYPTED,
|
|
3329
|
+
PROPERTY_NAME_VERSION,
|
|
3330
|
+
PROPERTY_NAME_VERSION_MADE_BY,
|
|
3331
|
+
PROPERTY_NAME_ZIPCRYPTO,
|
|
3332
|
+
PROPERTY_NAME_DIRECTORY,
|
|
3333
|
+
PROPERTY_NAME_EXECUTABLE,
|
|
3334
|
+
PROPERTY_NAME_COMPRESSION_METHOD,
|
|
3335
|
+
PROPERTY_NAME_SIGNATURE,
|
|
3336
|
+
PROPERTY_NAME_EXTRA_FIELD,
|
|
3337
|
+
PROPERTY_NAME_EXTRA_FIELD_UNIX,
|
|
3338
|
+
PROPERTY_NAME_EXTRA_FIELD_INFOZIP,
|
|
3339
|
+
PROPERTY_NAME_UID,
|
|
3340
|
+
PROPERTY_NAME_GID,
|
|
3341
|
+
PROPERTY_NAME_UNIX_MODE,
|
|
3342
|
+
PROPERTY_NAME_SETUID,
|
|
3343
|
+
PROPERTY_NAME_SETGID,
|
|
3344
|
+
PROPERTY_NAME_STICKY,
|
|
3345
|
+
PROPERTY_NAME_BITFLAG,
|
|
3346
|
+
PROPERTY_NAME_FILENAME_UTF8,
|
|
3347
|
+
PROPERTY_NAME_COMMENT_UTF8,
|
|
3348
|
+
PROPERTY_NAME_RAW_EXTRA_FIELD,
|
|
3349
|
+
PROPERTY_NAME_EXTRA_FIELD_ZIP64,
|
|
3350
|
+
PROPERTY_NAME_EXTRA_FIELD_UNICODE_PATH,
|
|
3351
|
+
PROPERTY_NAME_EXTRA_FIELD_UNICODE_COMMENT,
|
|
3352
|
+
PROPERTY_NAME_EXTRA_FIELD_AES,
|
|
3353
|
+
PROPERTY_NAME_EXTRA_FIELD_NTFS,
|
|
3354
|
+
PROPERTY_NAME_EXTRA_FIELD_EXTENDED_TIMESTAMP
|
|
3355
|
+
];
|
|
3272
3356
|
|
|
3273
3357
|
class Entry {
|
|
3274
3358
|
|
|
@@ -3335,6 +3419,7 @@
|
|
|
3335
3419
|
const OPTION_ENCODE_TEXT = "encodeText";
|
|
3336
3420
|
const OPTION_OFFSET = "offset";
|
|
3337
3421
|
const OPTION_USDZ = "usdz";
|
|
3422
|
+
const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
|
|
3338
3423
|
|
|
3339
3424
|
/*
|
|
3340
3425
|
Copyright (c) 2025 Gildas Lormeau. All rights reserved.
|
|
@@ -3377,6 +3462,7 @@
|
|
|
3377
3462
|
const ERR_SPLIT_ZIP_FILE = "Split zip file";
|
|
3378
3463
|
const ERR_OVERLAPPING_ENTRY = "Overlapping entry found";
|
|
3379
3464
|
const CHARSET_UTF8 = "utf-8";
|
|
3465
|
+
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
3380
3466
|
const CHARSET_CP437 = "cp437";
|
|
3381
3467
|
const ZIP64_PROPERTIES = [
|
|
3382
3468
|
[PROPERTY_NAME_UNCOMPRESSED_SIZE, MAX_32_BITS],
|
|
@@ -3532,51 +3618,71 @@
|
|
|
3532
3618
|
const filenameUTF8 = languageEncodingFlag;
|
|
3533
3619
|
const commentUTF8 = languageEncodingFlag;
|
|
3534
3620
|
const externalFileAttributes = getUint32(directoryView, offset + 38);
|
|
3535
|
-
const
|
|
3536
|
-
|
|
3537
|
-
|
|
3538
|
-
|
|
3539
|
-
|
|
3621
|
+
const msdosAttributesRaw = externalFileAttributes & MAX_8_BITS;
|
|
3622
|
+
const msdosAttributes = {
|
|
3623
|
+
readOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),
|
|
3624
|
+
hidden: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_HIDDEN_MASK),
|
|
3625
|
+
system: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_SYSTEM_MASK),
|
|
3626
|
+
directory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),
|
|
3627
|
+
archive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)
|
|
3628
|
+
};
|
|
3540
3629
|
const offsetFileEntry = getUint32(directoryView, offset + 42) + prependedDataLength;
|
|
3630
|
+
const decode = getOptionValue$1(zipReader, options, OPTION_DECODE_TEXT) || decodeText;
|
|
3631
|
+
const rawFilenameEncoding = filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437;
|
|
3632
|
+
const rawCommentEncoding = commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437;
|
|
3633
|
+
let filename = decode(rawFilename, rawFilenameEncoding);
|
|
3634
|
+
if (filename === UNDEFINED_VALUE) {
|
|
3635
|
+
filename = decodeText(rawFilename, rawFilenameEncoding);
|
|
3636
|
+
}
|
|
3637
|
+
let comment = decode(rawComment, rawCommentEncoding);
|
|
3638
|
+
if (comment === UNDEFINED_VALUE) {
|
|
3639
|
+
comment = decodeText(rawComment, rawCommentEncoding);
|
|
3640
|
+
}
|
|
3541
3641
|
Object.assign(fileEntry, {
|
|
3542
3642
|
versionMadeBy,
|
|
3543
3643
|
msDosCompatible,
|
|
3544
3644
|
compressedSize: 0,
|
|
3545
3645
|
uncompressedSize: 0,
|
|
3546
3646
|
commentLength,
|
|
3547
|
-
directory,
|
|
3548
3647
|
offset: offsetFileEntry,
|
|
3549
3648
|
diskNumberStart: getUint16(directoryView, offset + 34),
|
|
3550
3649
|
internalFileAttributes: getUint16(directoryView, offset + 36),
|
|
3551
3650
|
externalFileAttributes,
|
|
3651
|
+
msdosAttributesRaw,
|
|
3652
|
+
msdosAttributes,
|
|
3552
3653
|
rawFilename,
|
|
3553
3654
|
filenameUTF8,
|
|
3554
3655
|
commentUTF8,
|
|
3555
3656
|
rawExtraField: directoryArray.subarray(extraFieldOffset, commentOffset),
|
|
3556
|
-
executable
|
|
3557
|
-
});
|
|
3558
|
-
fileEntry.internalFileAttribute = fileEntry.internalFileAttributes;
|
|
3559
|
-
fileEntry.externalFileAttribute = fileEntry.externalFileAttributes;
|
|
3560
|
-
const decode = getOptionValue$1(zipReader, options, OPTION_DECODE_TEXT) || decodeText;
|
|
3561
|
-
const rawFilenameEncoding = filenameUTF8 ? CHARSET_UTF8 : filenameEncoding || CHARSET_CP437;
|
|
3562
|
-
const rawCommentEncoding = commentUTF8 ? CHARSET_UTF8 : commentEncoding || CHARSET_CP437;
|
|
3563
|
-
let filename = decode(rawFilename, rawFilenameEncoding);
|
|
3564
|
-
if (filename === UNDEFINED_VALUE) {
|
|
3565
|
-
filename = decodeText(rawFilename, rawFilenameEncoding);
|
|
3566
|
-
}
|
|
3567
|
-
let comment = decode(rawComment, rawCommentEncoding);
|
|
3568
|
-
if (comment === UNDEFINED_VALUE) {
|
|
3569
|
-
comment = decodeText(rawComment, rawCommentEncoding);
|
|
3570
|
-
}
|
|
3571
|
-
Object.assign(fileEntry, {
|
|
3572
3657
|
rawComment,
|
|
3573
3658
|
filename,
|
|
3574
|
-
comment
|
|
3575
|
-
directory: directory || filename.endsWith(DIRECTORY_SIGNATURE)
|
|
3659
|
+
comment
|
|
3576
3660
|
});
|
|
3577
3661
|
startOffset = Math.max(offsetFileEntry, startOffset);
|
|
3578
3662
|
readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6);
|
|
3579
|
-
|
|
3663
|
+
const unixExternalUpper = (fileEntry.externalFileAttributes >> 16) & MAX_16_BITS;
|
|
3664
|
+
if (fileEntry.unixMode === UNDEFINED_VALUE && (unixExternalUpper & (FILE_ATTR_UNIX_DEFAULT_MASK | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_TYPE_DIR)) != 0) {
|
|
3665
|
+
fileEntry.unixMode = unixExternalUpper;
|
|
3666
|
+
}
|
|
3667
|
+
const setuid = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_SETUID_MASK);
|
|
3668
|
+
const setgid = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_SETGID_MASK);
|
|
3669
|
+
const sticky = Boolean(fileEntry.unixMode & FILE_ATTR_UNIX_STICKY_MASK);
|
|
3670
|
+
const executable = (fileEntry.unixMode !== UNDEFINED_VALUE)
|
|
3671
|
+
? ((fileEntry.unixMode & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0)
|
|
3672
|
+
: (unixCompatible && ((unixExternalUpper & FILE_ATTR_UNIX_EXECUTABLE_MASK) != 0));
|
|
3673
|
+
const modeIsDir = fileEntry.unixMode !== UNDEFINED_VALUE && ((fileEntry.unixMode & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
|
|
3674
|
+
const upperIsDir = ((unixExternalUpper & FILE_ATTR_UNIX_TYPE_MASK) == FILE_ATTR_UNIX_TYPE_DIR);
|
|
3675
|
+
Object.assign(fileEntry, {
|
|
3676
|
+
setuid,
|
|
3677
|
+
setgid,
|
|
3678
|
+
sticky,
|
|
3679
|
+
unixExternalUpper,
|
|
3680
|
+
internalFileAttribute: fileEntry.internalFileAttributes,
|
|
3681
|
+
externalFileAttribute: fileEntry.externalFileAttributes,
|
|
3682
|
+
executable,
|
|
3683
|
+
directory: modeIsDir || upperIsDir || (msDosCompatible && msdosAttributes.directory) || (filename.endsWith(DIRECTORY_SIGNATURE) && !fileEntry.uncompressedSize),
|
|
3684
|
+
zipCrypto: fileEntry.encrypted && !fileEntry.extraFieldAES
|
|
3685
|
+
});
|
|
3580
3686
|
const entry = new Entry(fileEntry);
|
|
3581
3687
|
entry.getData = (writer, options) => fileEntry.getData(writer, entry, zipReader.readRanges, options);
|
|
3582
3688
|
entry.arrayBuffer = async options => {
|
|
@@ -3750,7 +3856,7 @@
|
|
|
3750
3856
|
zipCrypto,
|
|
3751
3857
|
encryptionStrength: extraFieldAES && extraFieldAES.strength,
|
|
3752
3858
|
signed: getOptionValue$1(zipEntry, options, OPTION_CHECK_SIGNATURE) && !passThrough,
|
|
3753
|
-
passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) &
|
|
3859
|
+
passwordVerification: zipCrypto && (dataDescriptor ? ((rawLastModDate >>> 8) & MAX_8_BITS) : ((signature >>> 24) & MAX_8_BITS)),
|
|
3754
3860
|
outputSize: passThrough ? compressedSize : uncompressedSize,
|
|
3755
3861
|
signature,
|
|
3756
3862
|
compressed: compressionMethod != 0 && !passThrough,
|
|
@@ -3881,6 +3987,17 @@
|
|
|
3881
3987
|
readExtraFieldNTFS(extraFieldNTFS, directory);
|
|
3882
3988
|
directory.extraFieldNTFS = extraFieldNTFS;
|
|
3883
3989
|
}
|
|
3990
|
+
const extraFieldUnix = extraField.get(EXTRAFIELD_TYPE_UNIX);
|
|
3991
|
+
if (extraFieldUnix) {
|
|
3992
|
+
readExtraFieldUnix(extraFieldUnix, directory, false);
|
|
3993
|
+
directory.extraFieldUnix = extraFieldUnix;
|
|
3994
|
+
} else {
|
|
3995
|
+
const extraFieldInfoZip = extraField.get(EXTRAFIELD_TYPE_INFOZIP);
|
|
3996
|
+
if (extraFieldInfoZip) {
|
|
3997
|
+
readExtraFieldUnix(extraFieldInfoZip, directory, true);
|
|
3998
|
+
directory.extraFieldInfoZip = extraFieldInfoZip;
|
|
3999
|
+
}
|
|
4000
|
+
}
|
|
3884
4001
|
const extraFieldExtendedTimestamp = extraField.get(EXTRAFIELD_TYPE_EXTENDED_TIMESTAMP);
|
|
3885
4002
|
if (extraFieldExtendedTimestamp) {
|
|
3886
4003
|
readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory);
|
|
@@ -3922,7 +4039,7 @@
|
|
|
3922
4039
|
});
|
|
3923
4040
|
if (extraFieldUnicode.valid) {
|
|
3924
4041
|
directory[propertyName] = extraFieldUnicode[propertyName];
|
|
3925
|
-
directory[propertyName +
|
|
4042
|
+
directory[propertyName + PROPERTY_NAME_UTF8_SUFFIX] = true;
|
|
3926
4043
|
}
|
|
3927
4044
|
}
|
|
3928
4045
|
|
|
@@ -3978,6 +4095,47 @@
|
|
|
3978
4095
|
}
|
|
3979
4096
|
}
|
|
3980
4097
|
|
|
4098
|
+
function readExtraFieldUnix(extraField, directory, isInfoZip) {
|
|
4099
|
+
try {
|
|
4100
|
+
const view = getDataView$1(new Uint8Array(extraField.data));
|
|
4101
|
+
let offset = 0;
|
|
4102
|
+
const version = getUint8(view, offset++);
|
|
4103
|
+
const uidSize = getUint8(view, offset++);
|
|
4104
|
+
const uidBytes = extraField.data.subarray(offset, offset + uidSize);
|
|
4105
|
+
offset += uidSize;
|
|
4106
|
+
const uid = unpackUnixId(uidBytes);
|
|
4107
|
+
const gidSize = getUint8(view, offset++);
|
|
4108
|
+
const gidBytes = extraField.data.subarray(offset, offset + gidSize);
|
|
4109
|
+
offset += gidSize;
|
|
4110
|
+
const gid = unpackUnixId(gidBytes);
|
|
4111
|
+
let unixMode = UNDEFINED_VALUE;
|
|
4112
|
+
if (!isInfoZip && offset + 2 <= extraField.data.length) {
|
|
4113
|
+
const base = extraField.data;
|
|
4114
|
+
const modeView = new DataView(base.buffer, base.byteOffset + offset, 2);
|
|
4115
|
+
unixMode = modeView.getUint16(0, true);
|
|
4116
|
+
}
|
|
4117
|
+
Object.assign(extraField, { version, uid, gid, unixMode });
|
|
4118
|
+
if (uid !== UNDEFINED_VALUE) {
|
|
4119
|
+
directory.uid = uid;
|
|
4120
|
+
}
|
|
4121
|
+
if (gid !== UNDEFINED_VALUE) {
|
|
4122
|
+
directory.gid = gid;
|
|
4123
|
+
}
|
|
4124
|
+
if (unixMode !== UNDEFINED_VALUE) {
|
|
4125
|
+
directory.unixMode = unixMode;
|
|
4126
|
+
}
|
|
4127
|
+
} catch {
|
|
4128
|
+
// ignored
|
|
4129
|
+
}
|
|
4130
|
+
}
|
|
4131
|
+
|
|
4132
|
+
function unpackUnixId(bytes) {
|
|
4133
|
+
const buffer = new Uint8Array(4);
|
|
4134
|
+
buffer.set(bytes, 0);
|
|
4135
|
+
const view = new DataView(buffer.buffer, buffer.byteOffset, 4);
|
|
4136
|
+
return view.getUint32(0, true);
|
|
4137
|
+
}
|
|
4138
|
+
|
|
3981
4139
|
function readExtraFieldExtendedTimestamp(extraFieldExtendedTimestamp, directory, localDirectory) {
|
|
3982
4140
|
const extraFieldView = getDataView$1(extraFieldExtendedTimestamp.data);
|
|
3983
4141
|
const flags = getUint8(extraFieldView, 0);
|
|
@@ -4104,7 +4262,7 @@
|
|
|
4104
4262
|
}
|
|
4105
4263
|
|
|
4106
4264
|
function getDate(timeRaw) {
|
|
4107
|
-
const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw &
|
|
4265
|
+
const date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & MAX_16_BITS;
|
|
4108
4266
|
try {
|
|
4109
4267
|
return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, (time & 0x001F) * 2, 0);
|
|
4110
4268
|
} catch {
|
|
@@ -4180,8 +4338,16 @@
|
|
|
4180
4338
|
const ERR_UNSUPPORTED_FORMAT = "Zip64 is not supported (make sure 'keepOrder' is set to 'true')";
|
|
4181
4339
|
const ERR_UNDEFINED_UNCOMPRESSED_SIZE = "Undefined uncompressed size";
|
|
4182
4340
|
const ERR_ZIP_NOT_EMPTY = "Zip file not empty";
|
|
4341
|
+
const ERR_INVALID_UID = "Invalid uid (must be integer 0..2^32-1)";
|
|
4342
|
+
const ERR_INVALID_GID = "Invalid gid (must be integer 0..2^32-1)";
|
|
4343
|
+
const ERR_INVALID_UNIX_MODE = "Invalid UNIX mode (must be integer 0..65535)";
|
|
4344
|
+
const ERR_INVALID_UNIX_EXTRA_FIELD_TYPE = "Invalid unixExtraFieldType (must be 'infozip' or 'unix')";
|
|
4345
|
+
const ERR_INVALID_MSDOS_ATTRIBUTES = "Invalid msdosAttributesRaw (must be integer 0..255)";
|
|
4346
|
+
const ERR_INVALID_MSDOS_DATA = "Invalid msdosAttributes (must be an object with boolean flags)";
|
|
4183
4347
|
|
|
4184
4348
|
const EXTRAFIELD_DATA_AES = new Uint8Array([0x07, 0x00, 0x02, 0x00, 0x41, 0x45, 0x03, 0x00, 0x00]);
|
|
4349
|
+
const INFOZIP_EXTRA_FIELD_TYPE = "infozip";
|
|
4350
|
+
const UNIX_EXTRA_FIELD_TYPE = "unix";
|
|
4185
4351
|
|
|
4186
4352
|
let workers = 0;
|
|
4187
4353
|
const pendingEntries = [];
|
|
@@ -4239,15 +4405,17 @@
|
|
|
4239
4405
|
rawExtraFieldAES,
|
|
4240
4406
|
rawExtraFieldExtendedTimestamp,
|
|
4241
4407
|
rawExtraFieldNTFS,
|
|
4242
|
-
|
|
4408
|
+
rawExtraFieldUnix,
|
|
4409
|
+
rawExtraField,
|
|
4243
4410
|
} = entry;
|
|
4244
4411
|
const { level, languageEncodingFlag, dataDescriptor } = bitFlag;
|
|
4245
4412
|
rawExtraFieldZip64 = rawExtraFieldZip64 || new Uint8Array();
|
|
4246
4413
|
rawExtraFieldAES = rawExtraFieldAES || new Uint8Array();
|
|
4247
4414
|
rawExtraFieldExtendedTimestamp = rawExtraFieldExtendedTimestamp || new Uint8Array();
|
|
4248
4415
|
rawExtraFieldNTFS = rawExtraFieldNTFS || new Uint8Array();
|
|
4416
|
+
rawExtraFieldUnix = entry.rawExtraFieldUnix || new Uint8Array();
|
|
4249
4417
|
rawExtraField = rawExtraField || new Uint8Array();
|
|
4250
|
-
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
|
|
4418
|
+
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
4251
4419
|
const zip64UncompressedSize = zip64 && uncompressedSize > MAX_32_BITS;
|
|
4252
4420
|
const zip64CompressedSize = zip64 && compressedSize > MAX_32_BITS;
|
|
4253
4421
|
const {
|
|
@@ -4274,6 +4442,7 @@
|
|
|
4274
4442
|
rawExtraFieldAES,
|
|
4275
4443
|
rawExtraFieldExtendedTimestamp,
|
|
4276
4444
|
rawExtraFieldNTFS,
|
|
4445
|
+
rawExtraFieldUnix,
|
|
4277
4446
|
rawExtraField,
|
|
4278
4447
|
extendedTimestamp: rawExtraFieldExtendedTimestamp.length > 0 || rawExtraFieldNTFS.length > 0,
|
|
4279
4448
|
extraFieldExtendedTimestampFlag: 0x1 + (lastAccessDate ? 0x2 : 0) + (creationDate ? 0x4 : 0),
|
|
@@ -4342,7 +4511,7 @@
|
|
|
4342
4511
|
while (pendingAddFileCalls.size) {
|
|
4343
4512
|
await Promise.allSettled(Array.from(pendingAddFileCalls));
|
|
4344
4513
|
}
|
|
4345
|
-
await closeFile(
|
|
4514
|
+
await closeFile(zipWriter, comment, options);
|
|
4346
4515
|
const preventClose = getOptionValue(zipWriter, options, OPTION_PREVENT_CLOSE);
|
|
4347
4516
|
if (!preventClose) {
|
|
4348
4517
|
await writable.getWriter().close();
|
|
@@ -4373,16 +4542,52 @@
|
|
|
4373
4542
|
return writable;
|
|
4374
4543
|
}
|
|
4375
4544
|
|
|
4376
|
-
close(comment =
|
|
4545
|
+
close(comment = UNDEFINED_VALUE, options = {}) {
|
|
4377
4546
|
return this.zipWriter.close(comment, options);
|
|
4378
4547
|
}
|
|
4379
4548
|
}
|
|
4380
4549
|
|
|
4381
4550
|
async function addFile(zipWriter, name, reader, options) {
|
|
4382
4551
|
name = name.trim();
|
|
4383
|
-
|
|
4384
|
-
|
|
4552
|
+
let msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
|
|
4553
|
+
let versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? 20 : 768);
|
|
4385
4554
|
const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
|
|
4555
|
+
const uid = getOptionValue(zipWriter, options, PROPERTY_NAME_UID);
|
|
4556
|
+
const gid = getOptionValue(zipWriter, options, PROPERTY_NAME_GID);
|
|
4557
|
+
let unixMode = getOptionValue(zipWriter, options, PROPERTY_NAME_UNIX_MODE);
|
|
4558
|
+
const unixExtraFieldType = getOptionValue(zipWriter, options, OPTION_UNIX_EXTRA_FIELD_TYPE);
|
|
4559
|
+
let setuid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETUID);
|
|
4560
|
+
let setgid = getOptionValue(zipWriter, options, PROPERTY_NAME_SETGID);
|
|
4561
|
+
let sticky = getOptionValue(zipWriter, options, PROPERTY_NAME_STICKY);
|
|
4562
|
+
if (uid !== UNDEFINED_VALUE && (uid < 0 || uid > MAX_32_BITS)) {
|
|
4563
|
+
throw new Error(ERR_INVALID_UID);
|
|
4564
|
+
}
|
|
4565
|
+
if (gid !== UNDEFINED_VALUE && (gid < 0 || gid > MAX_32_BITS)) {
|
|
4566
|
+
throw new Error(ERR_INVALID_GID);
|
|
4567
|
+
}
|
|
4568
|
+
if (unixMode !== UNDEFINED_VALUE && (unixMode < 0 || unixMode > MAX_16_BITS)) {
|
|
4569
|
+
throw new Error(ERR_INVALID_UNIX_MODE);
|
|
4570
|
+
}
|
|
4571
|
+
if (unixExtraFieldType !== UNDEFINED_VALUE && unixExtraFieldType !== INFOZIP_EXTRA_FIELD_TYPE && unixExtraFieldType !== UNIX_EXTRA_FIELD_TYPE) {
|
|
4572
|
+
throw new Error(ERR_INVALID_UNIX_EXTRA_FIELD_TYPE);
|
|
4573
|
+
}
|
|
4574
|
+
let msdosAttributesRaw = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES_RAW);
|
|
4575
|
+
let msdosAttributes = getOptionValue(zipWriter, options, PROPERTY_NAME_MSDOS_ATTRIBUTES);
|
|
4576
|
+
const hasUnixMetadata = uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE || unixExtraFieldType;
|
|
4577
|
+
const hasMsDosProvided = msdosAttributesRaw !== UNDEFINED_VALUE || msdosAttributes !== UNDEFINED_VALUE;
|
|
4578
|
+
if (hasUnixMetadata) {
|
|
4579
|
+
msDosCompatible = false;
|
|
4580
|
+
versionMadeBy = (versionMadeBy & MAX_16_BITS) | (3 << 8);
|
|
4581
|
+
} else if (hasMsDosProvided) {
|
|
4582
|
+
msDosCompatible = true;
|
|
4583
|
+
versionMadeBy = (versionMadeBy & MAX_8_BITS);
|
|
4584
|
+
}
|
|
4585
|
+
if (msdosAttributesRaw !== UNDEFINED_VALUE && (msdosAttributesRaw < 0 || msdosAttributesRaw > MAX_8_BITS)) {
|
|
4586
|
+
throw new Error(ERR_INVALID_MSDOS_ATTRIBUTES);
|
|
4587
|
+
}
|
|
4588
|
+
if (msdosAttributes && typeof msdosAttributes !== OBJECT_TYPE) {
|
|
4589
|
+
throw new Error(ERR_INVALID_MSDOS_DATA);
|
|
4590
|
+
}
|
|
4386
4591
|
if (versionMadeBy > MAX_16_BITS) {
|
|
4387
4592
|
throw new Error(ERR_INVALID_VERSION);
|
|
4388
4593
|
}
|
|
@@ -4408,6 +4613,34 @@
|
|
|
4408
4613
|
externalFileAttributes = FILE_ATTR_UNIX_DEFAULT_MASK << 16;
|
|
4409
4614
|
}
|
|
4410
4615
|
}
|
|
4616
|
+
let unixExternalUpper;
|
|
4617
|
+
if (!msDosCompatible) {
|
|
4618
|
+
unixExternalUpper = (externalFileAttributes >> 16) & MAX_16_BITS;
|
|
4619
|
+
unixMode = unixMode === UNDEFINED_VALUE ? unixExternalUpper : (unixMode & MAX_16_BITS);
|
|
4620
|
+
if (setuid) {
|
|
4621
|
+
unixMode |= FILE_ATTR_UNIX_SETUID_MASK;
|
|
4622
|
+
} else {
|
|
4623
|
+
setuid = Boolean(unixMode & FILE_ATTR_UNIX_SETUID_MASK);
|
|
4624
|
+
}
|
|
4625
|
+
if (setgid) {
|
|
4626
|
+
unixMode |= FILE_ATTR_UNIX_SETGID_MASK;
|
|
4627
|
+
} else {
|
|
4628
|
+
setgid = Boolean(unixMode & FILE_ATTR_UNIX_SETGID_MASK);
|
|
4629
|
+
}
|
|
4630
|
+
if (sticky) {
|
|
4631
|
+
unixMode |= FILE_ATTR_UNIX_STICKY_MASK;
|
|
4632
|
+
} else {
|
|
4633
|
+
sticky = Boolean(unixMode & FILE_ATTR_UNIX_STICKY_MASK);
|
|
4634
|
+
}
|
|
4635
|
+
if (directory) {
|
|
4636
|
+
unixMode |= FILE_ATTR_UNIX_TYPE_DIR;
|
|
4637
|
+
}
|
|
4638
|
+
externalFileAttributes = ((unixMode & MAX_16_BITS) << 16) | (externalFileAttributes & MAX_8_BITS);
|
|
4639
|
+
}
|
|
4640
|
+
({ msdosAttributesRaw, msdosAttributes } = normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes));
|
|
4641
|
+
if (hasMsDosProvided) {
|
|
4642
|
+
externalFileAttributes = (externalFileAttributes & MAX_32_BITS) | (msdosAttributesRaw & MAX_8_BITS);
|
|
4643
|
+
}
|
|
4411
4644
|
const encode = getOptionValue(zipWriter, options, OPTION_ENCODE_TEXT, encodeText);
|
|
4412
4645
|
let rawFilename = encode(name);
|
|
4413
4646
|
if (rawFilename === UNDEFINED_VALUE) {
|
|
@@ -4570,7 +4803,16 @@
|
|
|
4570
4803
|
compressionMethod,
|
|
4571
4804
|
uncompressedSize,
|
|
4572
4805
|
offset: zipWriter.offset - diskOffset,
|
|
4573
|
-
diskNumberStart: diskNumber
|
|
4806
|
+
diskNumberStart: diskNumber,
|
|
4807
|
+
uid,
|
|
4808
|
+
gid,
|
|
4809
|
+
setuid,
|
|
4810
|
+
setgid,
|
|
4811
|
+
sticky,
|
|
4812
|
+
unixMode,
|
|
4813
|
+
msdosAttributesRaw,
|
|
4814
|
+
msdosAttributes,
|
|
4815
|
+
unixExternalUpper
|
|
4574
4816
|
});
|
|
4575
4817
|
const headerInfo = getHeaderInfo(options);
|
|
4576
4818
|
const dataDescriptorInfo = getDataDescriptorInfo(options);
|
|
@@ -4762,7 +5004,8 @@
|
|
|
4762
5004
|
rawExtraFieldExtendedTimestamp,
|
|
4763
5005
|
extraFieldExtendedTimestampFlag,
|
|
4764
5006
|
rawExtraFieldNTFS,
|
|
4765
|
-
|
|
5007
|
+
rawExtraFieldUnix,
|
|
5008
|
+
rawExtraFieldAES,
|
|
4766
5009
|
} = headerInfo;
|
|
4767
5010
|
const { dataDescriptorArray } = dataDescriptorInfo;
|
|
4768
5011
|
const {
|
|
@@ -4794,6 +5037,15 @@
|
|
|
4794
5037
|
msDosCompatible,
|
|
4795
5038
|
internalFileAttributes,
|
|
4796
5039
|
externalFileAttributes,
|
|
5040
|
+
uid,
|
|
5041
|
+
gid,
|
|
5042
|
+
unixMode,
|
|
5043
|
+
setuid,
|
|
5044
|
+
setgid,
|
|
5045
|
+
sticky,
|
|
5046
|
+
unixExternalUpper,
|
|
5047
|
+
msdosAttributesRaw,
|
|
5048
|
+
msdosAttributes,
|
|
4797
5049
|
useCompressionStream,
|
|
4798
5050
|
passThrough
|
|
4799
5051
|
} = options;
|
|
@@ -4811,13 +5063,23 @@
|
|
|
4811
5063
|
localExtraFieldZip64Length,
|
|
4812
5064
|
rawExtraFieldExtendedTimestamp,
|
|
4813
5065
|
rawExtraFieldNTFS,
|
|
5066
|
+
rawExtraFieldUnix,
|
|
4814
5067
|
rawExtraFieldAES,
|
|
4815
5068
|
rawExtraField,
|
|
4816
5069
|
extendedTimestamp,
|
|
4817
5070
|
msDosCompatible,
|
|
4818
5071
|
internalFileAttributes,
|
|
4819
5072
|
externalFileAttributes,
|
|
4820
|
-
diskNumberStart
|
|
5073
|
+
diskNumberStart,
|
|
5074
|
+
uid,
|
|
5075
|
+
gid,
|
|
5076
|
+
unixMode,
|
|
5077
|
+
setuid,
|
|
5078
|
+
setgid,
|
|
5079
|
+
sticky,
|
|
5080
|
+
unixExternalUpper,
|
|
5081
|
+
msdosAttributesRaw,
|
|
5082
|
+
msdosAttributes
|
|
4821
5083
|
};
|
|
4822
5084
|
let {
|
|
4823
5085
|
signature,
|
|
@@ -4840,7 +5102,7 @@
|
|
|
4840
5102
|
password,
|
|
4841
5103
|
encryptionStrength,
|
|
4842
5104
|
zipCrypto: encrypted && zipCrypto,
|
|
4843
|
-
passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) &
|
|
5105
|
+
passwordVerification: encrypted && zipCrypto && (rawLastModDate >> 8) & MAX_8_BITS,
|
|
4844
5106
|
signed: !passThrough,
|
|
4845
5107
|
compressed: compressed && !passThrough,
|
|
4846
5108
|
encrypted: encrypted && !passThrough,
|
|
@@ -5019,6 +5281,49 @@
|
|
|
5019
5281
|
} else {
|
|
5020
5282
|
rawExtraFieldNTFS = rawExtraFieldExtendedTimestamp = new Uint8Array();
|
|
5021
5283
|
}
|
|
5284
|
+
let rawExtraFieldUnix;
|
|
5285
|
+
try {
|
|
5286
|
+
const { uid, gid, unixMode, setuid, setgid, sticky, unixExtraFieldType } = options;
|
|
5287
|
+
if (unixExtraFieldType && (uid !== UNDEFINED_VALUE || gid !== UNDEFINED_VALUE || unixMode !== UNDEFINED_VALUE)) {
|
|
5288
|
+
const uidBytes = packUnixId(uid);
|
|
5289
|
+
const gidBytes = packUnixId(gid);
|
|
5290
|
+
let modeArray = new Uint8Array();
|
|
5291
|
+
if (unixExtraFieldType == UNIX_EXTRA_FIELD_TYPE && unixMode !== UNDEFINED_VALUE) {
|
|
5292
|
+
let modeToWrite = unixMode & MAX_16_BITS;
|
|
5293
|
+
if (setuid) {
|
|
5294
|
+
modeToWrite |= FILE_ATTR_UNIX_SETUID_MASK;
|
|
5295
|
+
}
|
|
5296
|
+
if (setgid) {
|
|
5297
|
+
modeToWrite |= FILE_ATTR_UNIX_SETGID_MASK;
|
|
5298
|
+
}
|
|
5299
|
+
if (sticky) {
|
|
5300
|
+
modeToWrite |= FILE_ATTR_UNIX_STICKY_MASK;
|
|
5301
|
+
}
|
|
5302
|
+
modeArray = new Uint8Array(2);
|
|
5303
|
+
const modeDataView = new DataView(modeArray.buffer);
|
|
5304
|
+
modeDataView.setUint16(0, modeToWrite, true);
|
|
5305
|
+
}
|
|
5306
|
+
const payloadLength = 3 + uidBytes.length + gidBytes.length + modeArray.length;
|
|
5307
|
+
rawExtraFieldUnix = new Uint8Array(4 + payloadLength);
|
|
5308
|
+
const rawExtraFieldUnixView = getDataView(rawExtraFieldUnix);
|
|
5309
|
+
setUint16(rawExtraFieldUnixView, 0, unixExtraFieldType == INFOZIP_EXTRA_FIELD_TYPE ? EXTRAFIELD_TYPE_INFOZIP : EXTRAFIELD_TYPE_UNIX);
|
|
5310
|
+
setUint16(rawExtraFieldUnixView, 2, payloadLength);
|
|
5311
|
+
setUint8(rawExtraFieldUnixView, 4, 1);
|
|
5312
|
+
setUint8(rawExtraFieldUnixView, 5, uidBytes.length);
|
|
5313
|
+
let offset = 6;
|
|
5314
|
+
arraySet(rawExtraFieldUnix, uidBytes, offset);
|
|
5315
|
+
offset += uidBytes.length;
|
|
5316
|
+
setUint8(rawExtraFieldUnixView, offset, gidBytes.length);
|
|
5317
|
+
offset++;
|
|
5318
|
+
arraySet(rawExtraFieldUnix, gidBytes, offset);
|
|
5319
|
+
offset += gidBytes.length;
|
|
5320
|
+
arraySet(rawExtraFieldUnix, modeArray, offset);
|
|
5321
|
+
} else {
|
|
5322
|
+
rawExtraFieldUnix = new Uint8Array();
|
|
5323
|
+
}
|
|
5324
|
+
} catch {
|
|
5325
|
+
rawExtraFieldUnix = new Uint8Array();
|
|
5326
|
+
}
|
|
5022
5327
|
if (compressionMethod === UNDEFINED_VALUE) {
|
|
5023
5328
|
compressionMethod = compressed ? COMPRESSION_METHOD_DEFLATE : COMPRESSION_METHOD_STORE;
|
|
5024
5329
|
}
|
|
@@ -5031,7 +5336,7 @@
|
|
|
5031
5336
|
compressionMethod = COMPRESSION_METHOD_AES;
|
|
5032
5337
|
}
|
|
5033
5338
|
const localExtraFieldZip64Length = zip64ExtraFieldComplete ? getLength(rawExtraFieldZip64) : 0;
|
|
5034
|
-
const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
|
|
5339
|
+
const extraFieldLength = localExtraFieldZip64Length + getLength(rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
5035
5340
|
const {
|
|
5036
5341
|
headerArray,
|
|
5037
5342
|
headerView,
|
|
@@ -5064,6 +5369,8 @@
|
|
|
5064
5369
|
localHeaderOffset += getLength(rawExtraFieldExtendedTimestamp);
|
|
5065
5370
|
arraySet(localHeaderArray, rawExtraFieldNTFS, localHeaderOffset);
|
|
5066
5371
|
localHeaderOffset += getLength(rawExtraFieldNTFS);
|
|
5372
|
+
arraySet(localHeaderArray, rawExtraFieldUnix, localHeaderOffset);
|
|
5373
|
+
localHeaderOffset += getLength(rawExtraFieldUnix);
|
|
5067
5374
|
arraySet(localHeaderArray, rawExtraField, localHeaderOffset);
|
|
5068
5375
|
if (dataDescriptor) {
|
|
5069
5376
|
setUint32(localHeaderView, HEADER_OFFSET_COMPRESSED_SIZE + 4, 0);
|
|
@@ -5085,6 +5392,7 @@
|
|
|
5085
5392
|
localExtraFieldZip64Length,
|
|
5086
5393
|
rawExtraFieldExtendedTimestamp,
|
|
5087
5394
|
rawExtraFieldNTFS,
|
|
5395
|
+
rawExtraFieldUnix,
|
|
5088
5396
|
rawExtraFieldAES,
|
|
5089
5397
|
extraFieldLength
|
|
5090
5398
|
};
|
|
@@ -5111,6 +5419,46 @@
|
|
|
5111
5419
|
entryInfo.metadataSize += extraBytesLength;
|
|
5112
5420
|
}
|
|
5113
5421
|
|
|
5422
|
+
function packUnixId(id) {
|
|
5423
|
+
if (id === UNDEFINED_VALUE) {
|
|
5424
|
+
return new Uint8Array();
|
|
5425
|
+
} else {
|
|
5426
|
+
const dataArray = new Uint8Array(4);
|
|
5427
|
+
const dataView = getDataView(dataArray);
|
|
5428
|
+
dataView.setUint32(0, id, true);
|
|
5429
|
+
let length = 4;
|
|
5430
|
+
while (length > 1 && dataArray[length - 1] === 0) {
|
|
5431
|
+
length--;
|
|
5432
|
+
}
|
|
5433
|
+
return dataArray.subarray(0, length);
|
|
5434
|
+
}
|
|
5435
|
+
}
|
|
5436
|
+
|
|
5437
|
+
function normalizeMsdosAttributes(msdosAttributesRaw, msdosAttributes) {
|
|
5438
|
+
if (msdosAttributesRaw !== UNDEFINED_VALUE) {
|
|
5439
|
+
msdosAttributesRaw = msdosAttributesRaw & MAX_8_BITS;
|
|
5440
|
+
} else if (msdosAttributes !== UNDEFINED_VALUE) {
|
|
5441
|
+
const { readOnly, hidden, system, directory: msdDir, archive } = msdosAttributes;
|
|
5442
|
+
let raw = 0;
|
|
5443
|
+
if (readOnly) raw |= FILE_ATTR_MSDOS_READONLY_MASK;
|
|
5444
|
+
if (hidden) raw |= FILE_ATTR_MSDOS_HIDDEN_MASK;
|
|
5445
|
+
if (system) raw |= FILE_ATTR_MSDOS_SYSTEM_MASK;
|
|
5446
|
+
if (msdDir) raw |= FILE_ATTR_MSDOS_DIR_MASK;
|
|
5447
|
+
if (archive) raw |= FILE_ATTR_MSDOS_ARCHIVE_MASK;
|
|
5448
|
+
msdosAttributesRaw = raw & MAX_8_BITS;
|
|
5449
|
+
}
|
|
5450
|
+
if (msdosAttributes === UNDEFINED_VALUE) {
|
|
5451
|
+
msdosAttributes = {
|
|
5452
|
+
readOnly: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_READONLY_MASK),
|
|
5453
|
+
hidden: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_HIDDEN_MASK),
|
|
5454
|
+
system: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_SYSTEM_MASK),
|
|
5455
|
+
directory: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_DIR_MASK),
|
|
5456
|
+
archive: Boolean(msdosAttributesRaw & FILE_ATTR_MSDOS_ARCHIVE_MASK)
|
|
5457
|
+
};
|
|
5458
|
+
}
|
|
5459
|
+
return { msdosAttributesRaw, msdosAttributes };
|
|
5460
|
+
}
|
|
5461
|
+
|
|
5114
5462
|
function getDataDescriptorInfo({
|
|
5115
5463
|
zip64,
|
|
5116
5464
|
dataDescriptor,
|
|
@@ -5268,6 +5616,7 @@
|
|
|
5268
5616
|
rawExtraFieldAES,
|
|
5269
5617
|
rawComment,
|
|
5270
5618
|
rawExtraFieldNTFS,
|
|
5619
|
+
rawExtraFieldUnix,
|
|
5271
5620
|
rawExtraField,
|
|
5272
5621
|
extendedTimestamp,
|
|
5273
5622
|
extraFieldExtendedTimestampFlag,
|
|
@@ -5292,6 +5641,7 @@
|
|
|
5292
5641
|
rawExtraFieldZip64,
|
|
5293
5642
|
rawExtraFieldAES,
|
|
5294
5643
|
rawExtraFieldNTFS,
|
|
5644
|
+
rawExtraFieldUnix,
|
|
5295
5645
|
rawExtraFieldTimestamp,
|
|
5296
5646
|
rawExtraField);
|
|
5297
5647
|
}
|
|
@@ -5307,6 +5657,7 @@
|
|
|
5307
5657
|
rawExtraFieldAES,
|
|
5308
5658
|
rawExtraFieldExtendedTimestamp,
|
|
5309
5659
|
rawExtraFieldNTFS,
|
|
5660
|
+
rawExtraFieldUnix,
|
|
5310
5661
|
rawExtraField,
|
|
5311
5662
|
rawComment,
|
|
5312
5663
|
versionMadeBy,
|
|
@@ -5323,7 +5674,7 @@
|
|
|
5323
5674
|
uncompressedSize,
|
|
5324
5675
|
compressedSize
|
|
5325
5676
|
} = fileEntry;
|
|
5326
|
-
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraField);
|
|
5677
|
+
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
5327
5678
|
setUint32(directoryView, offset, CENTRAL_FILE_HEADER_SIGNATURE);
|
|
5328
5679
|
setUint16(directoryView, offset + 4, versionMadeBy);
|
|
5329
5680
|
if (!zip64UncompressedSize) {
|
|
@@ -5358,9 +5709,12 @@
|
|
|
5358
5709
|
directoryOffset += getLength(rawExtraFieldExtendedTimestamp);
|
|
5359
5710
|
arraySet(directoryArray, rawExtraFieldNTFS, directoryOffset);
|
|
5360
5711
|
directoryOffset += getLength(rawExtraFieldNTFS);
|
|
5712
|
+
arraySet(directoryArray, rawExtraFieldUnix, directoryOffset);
|
|
5713
|
+
directoryOffset += getLength(rawExtraFieldUnix);
|
|
5361
5714
|
arraySet(directoryArray, rawExtraField, directoryOffset);
|
|
5362
5715
|
directoryOffset += getLength(rawExtraField);
|
|
5363
5716
|
arraySet(directoryArray, rawComment, directoryOffset);
|
|
5717
|
+
directoryOffset += getLength(rawComment);
|
|
5364
5718
|
if (offset - directoryDiskOffset > writer.availableSize) {
|
|
5365
5719
|
writer.availableSize = 0;
|
|
5366
5720
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|