@zip.js/zip.js 2.8.58 → 2.8.59
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-external.js +157 -39
- package/dist/zip-core-external.min.js +1 -1
- package/dist/zip-core.js +171 -38
- package/dist/zip-core.min.js +1 -1
- package/dist/zip-fs-core-external.js +157 -40
- package/dist/zip-fs-core-external.min.js +1 -1
- package/dist/zip-fs-core.js +156 -39
- package/dist/zip-fs-core.min.js +1 -1
- package/dist/zip-fs-external.js +157 -40
- package/dist/zip-fs-external.min.js +1 -1
- package/dist/zip-fs-native.js +171 -39
- package/dist/zip-fs-native.min.js +1 -1
- package/dist/zip-fs.js +171 -39
- package/dist/zip-fs.min.js +1 -1
- package/dist/zip-legacy.js +171 -38
- package/dist/zip-legacy.min.js +1 -1
- package/dist/zip-native.js +171 -38
- package/dist/zip-native.min.js +1 -1
- package/dist/zip.js +171 -38
- package/dist/zip.min.js +1 -1
- package/index-native.cjs +171 -39
- package/index-native.min.js +1 -1
- package/index.cjs +171 -39
- package/index.d.cts +184 -1
- package/index.d.ts +184 -1
- package/index.min.js +1 -1
- package/lib/core/constants.js +2 -0
- package/lib/core/options.js +2 -0
- package/lib/core/zip-reader.js +143 -33
- package/lib/core/zip-writer.js +13 -6
- package/lib/zip-core-reader.js +16 -1
- package/package.json +1 -1
package/deno.json
CHANGED
|
@@ -74,6 +74,7 @@ const BITFLAG_LEVEL_MAX_MASK = 0b010;
|
|
|
74
74
|
const BITFLAG_LEVEL_FAST_MASK = 0b100;
|
|
75
75
|
const BITFLAG_LEVEL_SUPER_FAST_MASK = 0b110;
|
|
76
76
|
const BITFLAG_DATA_DESCRIPTOR = 0b1000;
|
|
77
|
+
const BITFLAG_COMPRESSED_PATCHED_DATA = 0b100000;
|
|
77
78
|
const BITFLAG_STRONG_ENCRYPTION = 0b1000000;
|
|
78
79
|
const BITFLAG_LANG_ENCODING_FLAG = 0b100000000000;
|
|
79
80
|
const BITFLAG_MASKED_LOCAL_HEADERS = 0b10000000000000;
|
|
@@ -191,6 +192,7 @@ const OPTION_OFFSET = "offset";
|
|
|
191
192
|
const OPTION_USDZ = "usdz";
|
|
192
193
|
const OPTION_UNIX_EXTRA_FIELD_TYPE = "unixExtraFieldType";
|
|
193
194
|
const OPTION_LOCAL_EXTRA_FIELD = "localExtraField";
|
|
195
|
+
const OPTION_CENTRAL_EXTRA_FIELD = "centralExtraField";
|
|
194
196
|
const OPTION_STRICTNESS = "strictness";
|
|
195
197
|
const OPTION_FILENAME_VALIDATION = "filenameValidation";
|
|
196
198
|
const OPTION_NORMALIZE_FILENAME = "normalizeFilename";
|
|
@@ -4740,6 +4742,21 @@ const ERR_INVALID_STRICTNESS = "Invalid strictness (must be 'strict', 'balanced'
|
|
|
4740
4742
|
const ERR_INVALID_FILENAME_VALIDATION = "Invalid filenameValidation (must be 'strict', 'balanced' or 'tolerant')";
|
|
4741
4743
|
const ERR_INVALID_MAX_APPENDED_DATA_SIZE = "Invalid maxAppendedDataSize (must be a number greater than or equal to 0)";
|
|
4742
4744
|
const ERR_UNSUPPORTED_UINT64 = "64-bit value exceeds Number.MAX_SAFE_INTEGER";
|
|
4745
|
+
const WARNING_UNSORTED_CENTRAL_DIRECTORY = "unsorted central directory";
|
|
4746
|
+
const WARNING_UNKNOWN_VERSION = "unknown version needed to extract";
|
|
4747
|
+
const WARNING_COMPRESSED_PATCHED_DATA = "compressed patched data";
|
|
4748
|
+
const WARNING_MALFORMED_EXTRA_FIELD = "malformed extra field";
|
|
4749
|
+
const WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA = "unknown zip64 extensible data";
|
|
4750
|
+
const WARNING_WRAPPED_ENTRIES_COUNT = "wrapped entries count";
|
|
4751
|
+
const WARNING_APPENDED_DATA = "appended data";
|
|
4752
|
+
const WARNING_PREPENDED_DATA = "prepended data";
|
|
4753
|
+
const WARNING_TRAILING_CENTRAL_DIRECTORY_DATA = "trailing central directory data";
|
|
4754
|
+
const WARNING_DUPLICATE_FILENAME = "duplicate filename";
|
|
4755
|
+
const WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY = "mismatched zip64 end of central directory record";
|
|
4756
|
+
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG = "mismatched local file header (general purpose bit flag)";
|
|
4757
|
+
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD = "mismatched local file header (compression method)";
|
|
4758
|
+
const WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES = "mismatched local file header (crc32 or sizes)";
|
|
4759
|
+
const MAX_KNOWN_VERSION = 63;
|
|
4743
4760
|
const DRIVE_LETTER_REGEXP = /^[a-zA-Z]:/;
|
|
4744
4761
|
const CHARSET_UTF8 = "utf-8";
|
|
4745
4762
|
const PROPERTY_NAME_UTF8_SUFFIX = "UTF8";
|
|
@@ -4790,6 +4807,7 @@ class ZipReader {
|
|
|
4790
4807
|
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
4791
4808
|
throw new Error(ERR_BAD_FORMAT);
|
|
4792
4809
|
}
|
|
4810
|
+
const warnings = zipReader.warnings = [];
|
|
4793
4811
|
const strictness = getStrictness(options, zipReader.options);
|
|
4794
4812
|
const checkAmbiguity = strictness == STRICTNESS_STRICT;
|
|
4795
4813
|
const rejectAmbiguousEndOfDirectory = strictness != STRICTNESS_TOLERANT;
|
|
@@ -4813,8 +4831,12 @@ class ZipReader {
|
|
|
4813
4831
|
const commentOffset = endOfDirectoryInfo.offset;
|
|
4814
4832
|
const commentLength = getUint16$1(endOfDirectoryView, 20);
|
|
4815
4833
|
const appendedDataOffset = commentOffset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
|
|
4816
|
-
|
|
4817
|
-
|
|
4834
|
+
const appendedDataLength = reader.size - appendedDataOffset;
|
|
4835
|
+
if (appendedDataLength > maxAppendedDataSize) {
|
|
4836
|
+
throwAmbiguousArchive(WARNING_APPENDED_DATA);
|
|
4837
|
+
}
|
|
4838
|
+
if (appendedDataLength > 0) {
|
|
4839
|
+
addWarning(warnings, WARNING_APPENDED_DATA);
|
|
4818
4840
|
}
|
|
4819
4841
|
let lastDiskNumber = getUint16$1(endOfDirectoryView, 4);
|
|
4820
4842
|
const expectedLastDiskNumber = reader.lastDiskNumber || 0;
|
|
@@ -4868,23 +4890,23 @@ class ZipReader {
|
|
|
4868
4890
|
}
|
|
4869
4891
|
if (lastDiskNumber == MAX_16_BITS) {
|
|
4870
4892
|
lastDiskNumber = getUint32$1(endOfDirectoryView, 16);
|
|
4871
|
-
} else if (
|
|
4872
|
-
|
|
4893
|
+
} else if (lastDiskNumber != getUint32$1(endOfDirectoryView, 16)) {
|
|
4894
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
|
|
4873
4895
|
}
|
|
4874
4896
|
if (diskNumber == MAX_16_BITS) {
|
|
4875
4897
|
diskNumber = getUint32$1(endOfDirectoryView, 20);
|
|
4876
|
-
} else if (
|
|
4877
|
-
|
|
4898
|
+
} else if (diskNumber != getUint32$1(endOfDirectoryView, 20)) {
|
|
4899
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
|
|
4878
4900
|
}
|
|
4879
4901
|
if (filesLength == MAX_16_BITS) {
|
|
4880
4902
|
filesLength = getBigUint64(endOfDirectoryView, 32);
|
|
4881
|
-
} else if (
|
|
4882
|
-
|
|
4903
|
+
} else if (filesLength != getBigUint64(endOfDirectoryView, 32)) {
|
|
4904
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
|
|
4883
4905
|
}
|
|
4884
4906
|
if (directoryDataLength == MAX_32_BITS) {
|
|
4885
4907
|
directoryDataLength = getBigUint64(endOfDirectoryView, 40);
|
|
4886
|
-
} else if (
|
|
4887
|
-
|
|
4908
|
+
} else if (directoryDataLength != getBigUint64(endOfDirectoryView, 40)) {
|
|
4909
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY);
|
|
4888
4910
|
}
|
|
4889
4911
|
directoryDataOffset = getDiskOffset$1(reader, diskNumber) + getBigUint64(endOfDirectoryView, 48) + prependedDataLength;
|
|
4890
4912
|
}
|
|
@@ -4953,14 +4975,22 @@ class ZipReader {
|
|
|
4953
4975
|
declaredDirectoryDataLength = directoryArray.length;
|
|
4954
4976
|
decryptedDirectory = true;
|
|
4955
4977
|
}
|
|
4978
|
+
if (directoryEncryptionInfo && !decryptedDirectory &&
|
|
4979
|
+
(directoryArray.length < 4 || getUint32$1(directoryView, 0) == CENTRAL_FILE_HEADER_SIGNATURE)) {
|
|
4980
|
+
addWarning(warnings, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA);
|
|
4981
|
+
}
|
|
4956
4982
|
startOffset = directoryDataOffset;
|
|
4957
4983
|
const filenameEncoding = getOptionValue$1(zipReader, options, OPTION_FILENAME_ENCODING);
|
|
4958
4984
|
const commentEncoding = getOptionValue$1(zipReader, options, OPTION_COMMENT_ENCODING);
|
|
4959
|
-
const filenames =
|
|
4985
|
+
const filenames = new Set();
|
|
4960
4986
|
let duplicateFilename;
|
|
4987
|
+
let previousEntryPosition = -1;
|
|
4961
4988
|
const recoverWrappedFilesLength = !checkAmbiguity && !zip64EndOfDirectory;
|
|
4962
4989
|
if (!filesLength && recoverWrappedFilesLength) {
|
|
4963
4990
|
filesLength = getWrappedFilesLength(directoryView, directoryArray, offset);
|
|
4991
|
+
if (filesLength) {
|
|
4992
|
+
addWarning(warnings, WARNING_WRAPPED_ENTRIES_COUNT);
|
|
4993
|
+
}
|
|
4964
4994
|
}
|
|
4965
4995
|
for (let indexFile = 0; indexFile < filesLength; indexFile++) {
|
|
4966
4996
|
const fileEntry = new ZipEntry(reader, zipReader.options);
|
|
@@ -5039,15 +5069,26 @@ class ZipReader {
|
|
|
5039
5069
|
filename,
|
|
5040
5070
|
comment
|
|
5041
5071
|
});
|
|
5042
|
-
readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6)
|
|
5072
|
+
if (readCommonFooter(fileEntry, fileEntry, directoryView, offset + 6)) {
|
|
5073
|
+
addWarning(warnings, WARNING_MALFORMED_EXTRA_FIELD, filename);
|
|
5074
|
+
}
|
|
5043
5075
|
fileEntry.offset += prependedDataLength;
|
|
5044
|
-
|
|
5045
|
-
|
|
5046
|
-
|
|
5047
|
-
|
|
5048
|
-
|
|
5049
|
-
|
|
5076
|
+
const entryPosition = getDiskOffset$1(reader, fileEntry.diskNumberStart) + fileEntry.offset;
|
|
5077
|
+
startOffset = Math.min(entryPosition, startOffset);
|
|
5078
|
+
if (entryPosition < previousEntryPosition) {
|
|
5079
|
+
addWarning(warnings, WARNING_UNSORTED_CENTRAL_DIRECTORY, filename);
|
|
5080
|
+
}
|
|
5081
|
+
previousEntryPosition = entryPosition;
|
|
5082
|
+
if ((fileEntry.version & MAX_8_BITS) > MAX_KNOWN_VERSION) {
|
|
5083
|
+
addWarning(warnings, WARNING_UNKNOWN_VERSION, filename);
|
|
5084
|
+
}
|
|
5085
|
+
if ((fileEntry.rawBitFlag & BITFLAG_COMPRESSED_PATCHED_DATA) == BITFLAG_COMPRESSED_PATCHED_DATA) {
|
|
5086
|
+
addWarning(warnings, WARNING_COMPRESSED_PATCHED_DATA, filename);
|
|
5087
|
+
}
|
|
5088
|
+
if (filenames.has(fileEntry.filename)) {
|
|
5089
|
+
duplicateFilename = true;
|
|
5050
5090
|
}
|
|
5091
|
+
filenames.add(fileEntry.filename);
|
|
5051
5092
|
const unixExternalUpper = (fileEntry.externalFileAttributes >> 16) & MAX_16_BITS;
|
|
5052
5093
|
if (fileEntry.unixMode === UNDEFINED_VALUE && (unixExternalUpper & (FILE_ATTR_UNIX_DEFAULT_MASK | FILE_ATTR_UNIX_EXECUTABLE_MASK | FILE_ATTR_UNIX_TYPE_DIR)) != 0) {
|
|
5053
5094
|
fileEntry.unixMode = unixExternalUpper;
|
|
@@ -5085,7 +5126,11 @@ class ZipReader {
|
|
|
5085
5126
|
};
|
|
5086
5127
|
offset = endOffset;
|
|
5087
5128
|
if (indexFile == filesLength - 1 && recoverWrappedFilesLength) {
|
|
5088
|
-
|
|
5129
|
+
const wrappedFilesLength = getWrappedFilesLength(directoryView, directoryArray, offset);
|
|
5130
|
+
if (wrappedFilesLength) {
|
|
5131
|
+
filesLength += wrappedFilesLength;
|
|
5132
|
+
addWarning(warnings, WARNING_WRAPPED_ENTRIES_COUNT);
|
|
5133
|
+
}
|
|
5089
5134
|
}
|
|
5090
5135
|
const { onprogress } = options;
|
|
5091
5136
|
if (onprogress) {
|
|
@@ -5111,18 +5156,22 @@ class ZipReader {
|
|
|
5111
5156
|
zipReader.digitalSignature = digitalSignature;
|
|
5112
5157
|
offsetAfterSignature = offset + 6 + digitalSignature.length;
|
|
5113
5158
|
}
|
|
5114
|
-
if (
|
|
5115
|
-
|
|
5159
|
+
if ((offset != declaredDirectoryDataLength && offsetAfterSignature != declaredDirectoryDataLength) ||
|
|
5160
|
+
(!decryptedDirectory && offset != directoryDataLength && offsetAfterSignature != directoryDataLength)) {
|
|
5161
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA);
|
|
5116
5162
|
}
|
|
5117
5163
|
if (duplicateFilename) {
|
|
5118
|
-
|
|
5164
|
+
reportAmbiguity(checkAmbiguity, warnings, WARNING_DUPLICATE_FILENAME);
|
|
5119
5165
|
}
|
|
5120
5166
|
const extractPrependedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_PREPENDED_DATA);
|
|
5121
5167
|
const extractAppendedData = getOptionValue$1(zipReader, options, OPTION_EXTRACT_APPENDED_DATA);
|
|
5122
5168
|
const splitZipSignatureLength = (checkAmbiguity || extractPrependedData) && filesLength &&
|
|
5123
5169
|
startOffset == SPLIT_ZIP_FILE_SIGNATURE_LENGTH && await startsWithSplitZipMarker(reader) ? SPLIT_ZIP_FILE_SIGNATURE_LENGTH : 0;
|
|
5124
5170
|
if (checkAmbiguity && (prependedDataLength || (filesLength && startOffset > splitZipSignatureLength))) {
|
|
5125
|
-
throwAmbiguousArchive(
|
|
5171
|
+
throwAmbiguousArchive(WARNING_PREPENDED_DATA);
|
|
5172
|
+
}
|
|
5173
|
+
if (prependedDataLength || (filesLength && startOffset > SPLIT_ZIP_FILE_SIGNATURE_LENGTH)) {
|
|
5174
|
+
addWarning(warnings, WARNING_PREPENDED_DATA);
|
|
5126
5175
|
}
|
|
5127
5176
|
if (extractPrependedData) {
|
|
5128
5177
|
zipReader.prependedData = startOffset > splitZipSignatureLength ?
|
|
@@ -5192,6 +5241,28 @@ class ZipReaderStream {
|
|
|
5192
5241
|
}
|
|
5193
5242
|
}
|
|
5194
5243
|
|
|
5244
|
+
async function isZipFile(reader, options = {}) {
|
|
5245
|
+
reader = new GenericReader(reader);
|
|
5246
|
+
await initStream(reader);
|
|
5247
|
+
if (reader.size === UNDEFINED_VALUE || !reader.readUint8Array) {
|
|
5248
|
+
reader = new BlobReader(await streamToBlob(reader.readable));
|
|
5249
|
+
await initStream(reader);
|
|
5250
|
+
}
|
|
5251
|
+
if (reader.size < END_OF_CENTRAL_DIR_LENGTH) {
|
|
5252
|
+
return false;
|
|
5253
|
+
}
|
|
5254
|
+
const strictness = getStrictness(options, {});
|
|
5255
|
+
const rejectAmbiguousEndOfDirectory = strictness != STRICTNESS_TOLERANT;
|
|
5256
|
+
const maxAppendedDataSize = getMaxAppendedDataSize(options[OPTION_MAX_APPENDED_DATA_SIZE], strictness);
|
|
5257
|
+
const { endOfDirectoryInfo, endOfDirectoryReachingEndCount } = await findEndOfCentralDirectory(reader, rejectAmbiguousEndOfDirectory, maxAppendedDataSize);
|
|
5258
|
+
if (!endOfDirectoryInfo || (strictness == STRICTNESS_STRICT && endOfDirectoryReachingEndCount > 1)) {
|
|
5259
|
+
return false;
|
|
5260
|
+
}
|
|
5261
|
+
const commentLength = getUint16$1(getDataView(endOfDirectoryInfo), 20);
|
|
5262
|
+
const appendedDataOffset = endOfDirectoryInfo.offset + END_OF_CENTRAL_DIR_LENGTH + commentLength;
|
|
5263
|
+
return reader.size - appendedDataOffset <= maxAppendedDataSize;
|
|
5264
|
+
}
|
|
5265
|
+
|
|
5195
5266
|
class ZipEntry {
|
|
5196
5267
|
|
|
5197
5268
|
constructor(reader, options) {
|
|
@@ -5223,6 +5294,7 @@ class ZipEntry {
|
|
|
5223
5294
|
dataDescriptor
|
|
5224
5295
|
} = bitFlag;
|
|
5225
5296
|
const localDirectory = fileEntry.localDirectory = {};
|
|
5297
|
+
const warnings = fileEntry.warnings = [];
|
|
5226
5298
|
const localHeaderOffset = getDiskOffset$1(reader, diskNumberStart) + offset;
|
|
5227
5299
|
const dataArray = await readUint8Array(reader, localHeaderOffset, HEADER_SIZE);
|
|
5228
5300
|
const dataView = getDataView(dataArray);
|
|
@@ -5263,10 +5335,10 @@ class ZipEntry {
|
|
|
5263
5335
|
if (checkLocalFilename) {
|
|
5264
5336
|
localDirectory.rawFilename = rawLocalFilename;
|
|
5265
5337
|
}
|
|
5266
|
-
readCommonFooter(zipEntry, localDirectory, dataView, 4, true)
|
|
5267
|
-
|
|
5268
|
-
validateLocalDirectory(zipEntry, localDirectory, rawLocalFilename, checkLocalFilename);
|
|
5338
|
+
if (readCommonFooter(zipEntry, localDirectory, dataView, 4, true)) {
|
|
5339
|
+
addWarning(warnings, WARNING_MALFORMED_EXTRA_FIELD);
|
|
5269
5340
|
}
|
|
5341
|
+
validateLocalDirectory(zipEntry, localDirectory, rawLocalFilename, checkLocalFilename, checkLocalDirectory ? UNDEFINED_VALUE : warnings);
|
|
5270
5342
|
const { lastAccessDate, creationDate, uid, gid } = localDirectory;
|
|
5271
5343
|
if (lastAccessDate) {
|
|
5272
5344
|
fileEntry.lastAccessDate = lastAccessDate;
|
|
@@ -5492,6 +5564,7 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5492
5564
|
const extraField = directory.extraField = new Map();
|
|
5493
5565
|
const rawExtraFieldView = getDataView(rawExtraField);
|
|
5494
5566
|
let offsetExtraField = 0;
|
|
5567
|
+
let malformedExtraField = false;
|
|
5495
5568
|
try {
|
|
5496
5569
|
while (offsetExtraField < rawExtraField.length) {
|
|
5497
5570
|
const type = getUint16$1(rawExtraFieldView, offsetExtraField);
|
|
@@ -5503,7 +5576,10 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5503
5576
|
offsetExtraField += 4 + size;
|
|
5504
5577
|
}
|
|
5505
5578
|
} catch {
|
|
5506
|
-
|
|
5579
|
+
malformedExtraField = true;
|
|
5580
|
+
}
|
|
5581
|
+
if (offsetExtraField > rawExtraField.length) {
|
|
5582
|
+
malformedExtraField = true;
|
|
5507
5583
|
}
|
|
5508
5584
|
const compressionMethod = getUint16$1(dataView, offset + 4);
|
|
5509
5585
|
Object.assign(directory, {
|
|
@@ -5571,6 +5647,7 @@ function readCommonFooter(fileEntry, directory, dataView, offset, localDirectory
|
|
|
5571
5647
|
if (extraFieldUSDZ) {
|
|
5572
5648
|
directory.extraFieldUSDZ = extraFieldUSDZ;
|
|
5573
5649
|
}
|
|
5650
|
+
return malformedExtraField;
|
|
5574
5651
|
}
|
|
5575
5652
|
|
|
5576
5653
|
function readExtraFieldZip64(extraFieldZip64, directory) {
|
|
@@ -6032,27 +6109,46 @@ async function readSignature(reader, view, anchoredOffset, signatureOffset, size
|
|
|
6032
6109
|
return UNDEFINED_VALUE;
|
|
6033
6110
|
}
|
|
6034
6111
|
|
|
6035
|
-
function validateLocalDirectory(zipEntry, localDirectory, rawLocalFilename, checkLocalFilename) {
|
|
6112
|
+
function validateLocalDirectory(zipEntry, localDirectory, rawLocalFilename, checkLocalFilename, warnings) {
|
|
6036
6113
|
const { rawFilename } = zipEntry;
|
|
6114
|
+
const reject = !warnings;
|
|
6037
6115
|
const maskedLocalDirectory = zipEntry.decryptedDirectory &&
|
|
6038
6116
|
(localDirectory.rawBitFlag & BITFLAG_MASKED_LOCAL_HEADERS) == BITFLAG_MASKED_LOCAL_HEADERS;
|
|
6039
6117
|
if (checkLocalFilename && !maskedLocalDirectory &&
|
|
6040
6118
|
(rawLocalFilename.length != rawFilename.length ||
|
|
6041
6119
|
rawLocalFilename.some((byteValue, indexByte) => byteValue != rawFilename[indexByte]))) {
|
|
6042
|
-
|
|
6120
|
+
reportAmbiguity(reject, warnings, "mismatched local file header (filename)");
|
|
6043
6121
|
}
|
|
6044
6122
|
if ((localDirectory.rawBitFlag & BITFLAG_AMBIGUITY_MASK) != (zipEntry.rawBitFlag & BITFLAG_AMBIGUITY_MASK)) {
|
|
6045
|
-
|
|
6123
|
+
reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG);
|
|
6046
6124
|
}
|
|
6047
6125
|
if (localDirectory.compressionMethod != zipEntry.compressionMethod) {
|
|
6048
|
-
|
|
6126
|
+
reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD);
|
|
6049
6127
|
}
|
|
6050
6128
|
if (!localDirectory.bitFlag.dataDescriptor && !maskedLocalDirectory &&
|
|
6051
6129
|
(localDirectory.crc32 || localDirectory.compressedSize || localDirectory.uncompressedSize) &&
|
|
6052
6130
|
(localDirectory.crc32 != zipEntry.crc32 ||
|
|
6053
6131
|
localDirectory.compressedSize != zipEntry.compressedSize ||
|
|
6054
6132
|
localDirectory.uncompressedSize != zipEntry.uncompressedSize)) {
|
|
6055
|
-
|
|
6133
|
+
reportAmbiguity(reject, warnings, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES);
|
|
6134
|
+
}
|
|
6135
|
+
}
|
|
6136
|
+
|
|
6137
|
+
function reportAmbiguity(reject, warnings, reason) {
|
|
6138
|
+
if (reject) {
|
|
6139
|
+
throwAmbiguousArchive(reason);
|
|
6140
|
+
} else {
|
|
6141
|
+
addWarning(warnings, reason);
|
|
6142
|
+
}
|
|
6143
|
+
}
|
|
6144
|
+
|
|
6145
|
+
function addWarning(warnings, reason, filename) {
|
|
6146
|
+
if (!warnings.some(warning => warning.reason == reason)) {
|
|
6147
|
+
const warning = { reason };
|
|
6148
|
+
if (filename !== UNDEFINED_VALUE) {
|
|
6149
|
+
warning.filename = filename;
|
|
6150
|
+
}
|
|
6151
|
+
warnings.push(warning);
|
|
6056
6152
|
}
|
|
6057
6153
|
}
|
|
6058
6154
|
|
|
@@ -6129,8 +6225,23 @@ var zipReader = /*#__PURE__*/Object.freeze({
|
|
|
6129
6225
|
ERR_UNSUPPORTED_ENCRYPTION: ERR_UNSUPPORTED_ENCRYPTION,
|
|
6130
6226
|
ERR_UNSUPPORTED_UINT64: ERR_UNSUPPORTED_UINT64,
|
|
6131
6227
|
ERR_WORKER_STARTUP_TIMEOUT: ERR_WORKER_STARTUP_TIMEOUT,
|
|
6228
|
+
WARNING_APPENDED_DATA: WARNING_APPENDED_DATA,
|
|
6229
|
+
WARNING_COMPRESSED_PATCHED_DATA: WARNING_COMPRESSED_PATCHED_DATA,
|
|
6230
|
+
WARNING_DUPLICATE_FILENAME: WARNING_DUPLICATE_FILENAME,
|
|
6231
|
+
WARNING_MALFORMED_EXTRA_FIELD: WARNING_MALFORMED_EXTRA_FIELD,
|
|
6232
|
+
WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG: WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG,
|
|
6233
|
+
WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD: WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD,
|
|
6234
|
+
WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES: WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES,
|
|
6235
|
+
WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY: WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY,
|
|
6236
|
+
WARNING_PREPENDED_DATA: WARNING_PREPENDED_DATA,
|
|
6237
|
+
WARNING_TRAILING_CENTRAL_DIRECTORY_DATA: WARNING_TRAILING_CENTRAL_DIRECTORY_DATA,
|
|
6238
|
+
WARNING_UNKNOWN_VERSION: WARNING_UNKNOWN_VERSION,
|
|
6239
|
+
WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA: WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA,
|
|
6240
|
+
WARNING_UNSORTED_CENTRAL_DIRECTORY: WARNING_UNSORTED_CENTRAL_DIRECTORY,
|
|
6241
|
+
WARNING_WRAPPED_ENTRIES_COUNT: WARNING_WRAPPED_ENTRIES_COUNT,
|
|
6132
6242
|
ZipReader: ZipReader,
|
|
6133
|
-
ZipReaderStream: ZipReaderStream
|
|
6243
|
+
ZipReaderStream: ZipReaderStream,
|
|
6244
|
+
isZipFile: isZipFile
|
|
6134
6245
|
});
|
|
6135
6246
|
|
|
6136
6247
|
/*
|
|
@@ -6343,6 +6454,7 @@ class ZipWriter {
|
|
|
6343
6454
|
rawExtraFieldNTFS: EMPTY_UINT8_ARRAY,
|
|
6344
6455
|
rawExtraFieldUnix: EMPTY_UINT8_ARRAY,
|
|
6345
6456
|
rawExtraField,
|
|
6457
|
+
rawCentralExtraField: EMPTY_UINT8_ARRAY,
|
|
6346
6458
|
extendedTimestamp: false,
|
|
6347
6459
|
headerArray,
|
|
6348
6460
|
headerView
|
|
@@ -6516,7 +6628,6 @@ async function prependZipEntries(zipWriter, reader) {
|
|
|
6516
6628
|
|
|
6517
6629
|
async function addFileEntry(zipWriter, name, reader, options) {
|
|
6518
6630
|
options = Object.assign({}, options);
|
|
6519
|
-
name = name.trim();
|
|
6520
6631
|
if (getOptionValue(zipWriter, options, PROPERTY_NAME_DIRECTORY) && !name.endsWith(DIRECTORY_SIGNATURE)) {
|
|
6521
6632
|
name += DIRECTORY_SIGNATURE;
|
|
6522
6633
|
}
|
|
@@ -6607,7 +6718,6 @@ async function addFile(zipWriter, name, reader, options) {
|
|
|
6607
6718
|
}
|
|
6608
6719
|
|
|
6609
6720
|
function resolveAttributes(zipWriter, name, options) {
|
|
6610
|
-
name = name.trim();
|
|
6611
6721
|
let msDosCompatible = getOptionValue(zipWriter, options, PROPERTY_NAME_MS_DOS_COMPATIBLE);
|
|
6612
6722
|
let versionMadeBy = getOptionValue(zipWriter, options, PROPERTY_NAME_VERSION_MADE_BY, msDosCompatible ? VERSION_MADE_BY_MSDOS : VERSION_MADE_BY_UNIX);
|
|
6613
6723
|
const executable = getOptionValue(zipWriter, options, PROPERTY_NAME_EXECUTABLE);
|
|
@@ -6812,6 +6922,7 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
6812
6922
|
}
|
|
6813
6923
|
const rawExtraField = serializeExtraField(options[PROPERTY_NAME_EXTRA_FIELD]);
|
|
6814
6924
|
const rawLocalExtraField = serializeExtraField(options[OPTION_LOCAL_EXTRA_FIELD]);
|
|
6925
|
+
const rawCentralExtraField = serializeExtraField(options[OPTION_CENTRAL_EXTRA_FIELD]);
|
|
6815
6926
|
return {
|
|
6816
6927
|
comment,
|
|
6817
6928
|
resolvedOptions: {
|
|
@@ -6847,7 +6958,8 @@ function resolveMetadata(zipWriter, name, options) {
|
|
|
6847
6958
|
dataDescriptor,
|
|
6848
6959
|
zip64,
|
|
6849
6960
|
rawExtraField,
|
|
6850
|
-
rawLocalExtraField
|
|
6961
|
+
rawLocalExtraField,
|
|
6962
|
+
rawCentralExtraField
|
|
6851
6963
|
}
|
|
6852
6964
|
};
|
|
6853
6965
|
}
|
|
@@ -7166,6 +7278,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7166
7278
|
versionMadeBy,
|
|
7167
7279
|
rawComment,
|
|
7168
7280
|
rawExtraField,
|
|
7281
|
+
rawCentralExtraField,
|
|
7169
7282
|
useWebWorkers,
|
|
7170
7283
|
transferStreams,
|
|
7171
7284
|
onstart,
|
|
@@ -7209,6 +7322,7 @@ async function createFileEntry(reader, writer, { diskNumberStart, lockFileEntry
|
|
|
7209
7322
|
rawExtraFieldUnix,
|
|
7210
7323
|
rawExtraFieldAES,
|
|
7211
7324
|
rawExtraField,
|
|
7325
|
+
rawCentralExtraField,
|
|
7212
7326
|
extendedTimestamp,
|
|
7213
7327
|
msDosCompatible,
|
|
7214
7328
|
internalFileAttributes,
|
|
@@ -7709,6 +7823,7 @@ function createDirectoryRecords(files) {
|
|
|
7709
7823
|
rawExtraFieldNTFS,
|
|
7710
7824
|
rawExtraFieldUnix,
|
|
7711
7825
|
rawExtraField,
|
|
7826
|
+
rawCentralExtraField,
|
|
7712
7827
|
extendedTimestamp,
|
|
7713
7828
|
extraFieldExtendedTimestampFlag,
|
|
7714
7829
|
lastModDate,
|
|
@@ -7763,7 +7878,8 @@ function createDirectoryRecords(files) {
|
|
|
7763
7878
|
rawExtraFieldNTFS,
|
|
7764
7879
|
rawExtraFieldUnix,
|
|
7765
7880
|
rawExtraFieldTimestamp,
|
|
7766
|
-
rawExtraField
|
|
7881
|
+
rawExtraField,
|
|
7882
|
+
rawCentralExtraField);
|
|
7767
7883
|
if (extraFieldLength > MAX_16_BITS) {
|
|
7768
7884
|
throw new Error(ERR_INVALID_EXTRAFIELD_DATA);
|
|
7769
7885
|
}
|
|
@@ -7791,6 +7907,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
7791
7907
|
rawExtraFieldNTFS,
|
|
7792
7908
|
rawExtraFieldUnix,
|
|
7793
7909
|
rawExtraField,
|
|
7910
|
+
rawCentralExtraField,
|
|
7794
7911
|
rawComment,
|
|
7795
7912
|
versionMadeBy,
|
|
7796
7913
|
headerArray,
|
|
@@ -7805,7 +7922,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
7805
7922
|
uncompressedSize,
|
|
7806
7923
|
compressedSize
|
|
7807
7924
|
} = fileEntry;
|
|
7808
|
-
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField);
|
|
7925
|
+
const extraFieldLength = getLength(rawExtraFieldZip64, rawExtraFieldAES, rawExtraFieldExtendedTimestamp, rawExtraFieldNTFS, rawExtraFieldUnix, rawExtraField, rawCentralExtraField);
|
|
7809
7926
|
const directoryRecordLength = CENTRAL_FILE_HEADER_LENGTH + getLength(rawFilename, rawComment) + extraFieldLength;
|
|
7810
7927
|
if (exceedsAvailableSize(writer, offset + directoryRecordLength - directoryDiskOffset)) {
|
|
7811
7928
|
await writeData(writer, directoryArray.slice(directoryDiskOffset, offset));
|
|
@@ -7843,6 +7960,7 @@ async function writeDirectoryRecords(zipWriter, directoryDataLength, options) {
|
|
|
7843
7960
|
directoryRecord.writeBytes(rawExtraFieldNTFS);
|
|
7844
7961
|
directoryRecord.writeBytes(rawExtraFieldUnix);
|
|
7845
7962
|
directoryRecord.writeBytes(rawExtraField);
|
|
7963
|
+
directoryRecord.writeBytes(rawCentralExtraField);
|
|
7846
7964
|
directoryRecord.writeBytes(rawComment);
|
|
7847
7965
|
arraySet(directoryArray, directoryRecord.array, offset);
|
|
7848
7966
|
offset += directoryRecordLength;
|
|
@@ -9139,4 +9257,4 @@ function terminateWorkersAndModule() {
|
|
|
9139
9257
|
|
|
9140
9258
|
configureExternalAssets();
|
|
9141
9259
|
|
|
9142
|
-
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, Writer, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|
|
9260
|
+
export { BlobReader, BlobWriter, Data64URIReader, Data64URIWriter, ERR_AMBIGUOUS_ARCHIVE, ERR_BAD_FORMAT, ERR_CENTRAL_DIRECTORY_NOT_FOUND, ERR_DUPLICATED_NAME, ERR_ENCRYPTED, ERR_ENCRYPTED_CENTRAL_DIRECTORY, ERR_ENTRY_DATA_OUT_OF_BOUNDS, ERR_EOCDR_LOCATOR_ZIP64_NOT_FOUND, ERR_EOCDR_NOT_FOUND, ERR_EXTRAFIELD_ZIP64_NOT_FOUND, ERR_HTTP_RANGE, ERR_HTTP_RESOURCE_CHANGED, ERR_INVALID_AUTHENTICATION_CODE, ERR_INVALID_CODEC_DEFINITION, ERR_INVALID_CODEC_MODULE, ERR_INVALID_COMMENT, ERR_INVALID_COMMENT_TYPE, ERR_INVALID_COMPRESSED_DATA, ERR_INVALID_CRC32, ERR_INVALID_DATE, ERR_INVALID_ENCRYPTION_STRENGTH, ERR_INVALID_ENTRY_COMMENT, ERR_INVALID_ENTRY_COMMENT_TYPE, ERR_INVALID_ENTRY_NAME, ERR_INVALID_EXTRAFIELD, ERR_INVALID_EXTRAFIELD_DATA, ERR_INVALID_EXTRAFIELD_DATA_TYPE, ERR_INVALID_EXTRAFIELD_TYPE, ERR_INVALID_FILENAME_VALIDATION, ERR_INVALID_FUNCTION_OPTION, ERR_INVALID_GID, ERR_INVALID_LEVEL, ERR_INVALID_MAX_APPENDED_DATA_SIZE, ERR_INVALID_MAX_WORKERS, ERR_INVALID_MSDOS_ATTRIBUTES, ERR_INVALID_MSDOS_DATA, ERR_INVALID_PASSWORD, ERR_INVALID_PASSWORD_TYPE, ERR_INVALID_SIGNAL, ERR_INVALID_SIGNATURE, ERR_INVALID_SIGNATURE_DATA, ERR_INVALID_STRICTNESS, ERR_INVALID_UID, ERR_INVALID_UNCOMPRESSED_SIZE, ERR_INVALID_UNIX_EXTRA_FIELD_TYPE, ERR_INVALID_UNIX_ID_SIZE, ERR_INVALID_UNIX_MODE, ERR_INVALID_VERSION, ERR_ITERATOR_COMPLETED_TOO_SOON, ERR_LOCAL_FILE_HEADER_NOT_FOUND, ERR_OVERLAPPING_ENTRY, ERR_RESERVED_COMPRESSION_METHOD, ERR_SPLIT_ZIP_FILE, ERR_UNDEFINED_COMPRESSION_METHOD, ERR_UNDEFINED_READER, ERR_UNDEFINED_UNCOMPRESSED_SIZE, ERR_UNDETERMINED_SIZE, ERR_UNSAFE_FILENAME, ERR_UNSUPPORTED_COMPRESSION$1 as ERR_UNSUPPORTED_COMPRESSION, ERR_UNSUPPORTED_CONTEXT, ERR_UNSUPPORTED_CRYPTO_API, ERR_UNSUPPORTED_ENCRYPTION, ERR_UNSUPPORTED_ENCRYPTION_PASS_THROUGH, ERR_UNSUPPORTED_ENCRYPTION_USDZ, ERR_UNSUPPORTED_FORMAT, ERR_UNSUPPORTED_UINT64, ERR_WORKER_STARTUP_TIMEOUT, ERR_WRITER_NOT_INITIALIZED, ERR_ZIP_NOT_EMPTY, HttpRangeReader, HttpReader, Reader, SplitDataReader, SplitDataWriter, TextReader, TextWriter, Uint8ArrayReader, Uint8ArrayWriter, WARNING_APPENDED_DATA, WARNING_COMPRESSED_PATCHED_DATA, WARNING_DUPLICATE_FILENAME, WARNING_MALFORMED_EXTRA_FIELD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_BIT_FLAG, WARNING_MISMATCHED_LOCAL_FILE_HEADER_COMPRESSION_METHOD, WARNING_MISMATCHED_LOCAL_FILE_HEADER_CRC32_OR_SIZES, WARNING_MISMATCHED_ZIP64_END_OF_CENTRAL_DIRECTORY, WARNING_PREPENDED_DATA, WARNING_TRAILING_CENTRAL_DIRECTORY_DATA, WARNING_UNKNOWN_VERSION, WARNING_UNKNOWN_ZIP64_EXTENSIBLE_DATA, WARNING_UNSORTED_CENTRAL_DIRECTORY, WARNING_WRAPPED_ENTRIES_COUNT, Writer, ZipReader, ZipReaderStream, ZipWriter, ZipWriterStream, configure, createBlobTempStream, createOPFSTempStream, createSyncAccessHandleTempStream, getMimeType, isZipFile, registerCodec, resetConfiguration, terminateWorkersAndModule as terminateWorkers, unregisterCodec };
|