diff --git a/.pnp.cjs b/.pnp.cjs index c6ba5b389981..8526a1bd694f 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -197,6 +197,7 @@ const RAW_RUNTIME_STATE = ],\ "enableTopLevelFallback": true,\ "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\ + "pnpZipBackend": "js",\ "fallbackExclusionList": [\ ["@yarnpkg/builder", ["workspace:packages/yarnpkg-builder"]],\ ["@yarnpkg/cli", ["virtual:142f2540721377707149f0b1d7ad0188d020f822e234abcdca162642d42824b344a1ac44bd6035644a0ca9babd62eb7d72923350ac75b876b51e87eb92b3e464#workspace:packages/yarnpkg-cli", "virtual:14a22fb3831dfc762a1bb8a042d17886271c56698e1a83233f09eaacff5a5b83fe6f87adb9255774eab3586392c18ff98cf87aa6b374d572d9b72f88829f6d9e#workspace:packages/yarnpkg-cli", "virtual:27ebb8cf1fa70157f710b4926b6d25c44192e74dbac3a766c8dc6505a59ebc433221bfb4b5aabc8cca814bbe95fcb6e1ecffcf94ba96ee6112a57c89364571ac#workspace:packages/yarnpkg-cli", "virtual:35104c47575f2fe378d8d20383ae667f19d4dd801df8cc4c76848603aa6b4a2234a00142ff12fd557f6f48bd2810880e31c40c767010ea61a31fca302c2cc5e0#workspace:packages/yarnpkg-cli", "virtual:3f21a2572d1fa6d1ff8d16d86e25bcefcbff7d17161c440fdbddbd871d9d675c377d66a2cbd98ddb8f2c024060bc7bc6c01e8ae328fa1fef861c72a9b2c30755#workspace:packages/yarnpkg-cli", "virtual:4a733c8d9614e2148392368219d98ec1a70b4e8ce99164edd551241b22f6c5233e9d0ccf9f6d83265c8a5aafc617cfd3c4100b3efef1e092a42053c23770ed9a#workspace:packages/yarnpkg-cli", "virtual:616a2ba0d005227805d037f4c8ec29f1dd09fdb3e3f49f7b5c4a07a62139a147d373d38bc5ebcb31bddab3956c3fc25d54edf8722741d9ebdbe9d36d21968f91#workspace:packages/yarnpkg-cli", "virtual:712d04b0098634bdb13868ff8f85b327022bd7d3880873ada8c0ae56847ed36cf9da1fd74a88519380129cec528fe2bd2201426bc28ac9d4a8cc6734ff25c538#workspace:packages/yarnpkg-cli", "virtual:743b60015fc887fe314a7ee01ea4843b516ac512d77939f47dc39d50bc7db742dc8994fe9bb2245ada0b3ce6f8aa58329d603fbc24093050cd499cb16a1a995f#workspace:packages/yarnpkg-cli", "virtual:86c95fabbcd56c56f5f2d2e080e64a1095e3fe233877aa9f7958f317f88a95627e0be2765e89c0cff02c9f08f27b64b7cbc9d5c3960c1df509d5e6ea98cca4f4#workspace:packages/yarnpkg-cli", "virtual:8bb72793b532d34e63bbc26264dcbcfc4dc4faa0a42627635e997081722bf229d67b7a677d86a568dad949d756630e45b9d4da97ee14b1b4c506494f8a58ea91#workspace:packages/yarnpkg-cli", "virtual:a027ddc7edcbf74025e90effce333897039d2c6f8e1ebe319fb72c52c5be1b885da91acc56476d19bb6ce2e31cbc2d5b11241940b82f833a2cac262496c0088f#workspace:packages/yarnpkg-cli", "virtual:a4e4e792796cefb4fb82f09187fa18bf4c97a9cb5b106da0eab6189e1895a4bb9bf068e5c91168fec85cee1392df48e4a120f3bae6cbbbde019ff2c21186a374#workspace:packages/yarnpkg-cli", "virtual:baf8bf095598663073ea5e8bd5af72409e894f8926160bf6fe0a24c693d417f91b536d9e3bbb0ea5f3d0ad8cd2f1ec38b71e964f9475ba719a1f5a8505cf10c3#workspace:packages/yarnpkg-cli", "virtual:cfce476fbcac37853570c2d41665757b5f868b1c2f089ee6edbc8bb5aa32141e156cae7d75350d1095258d90afbabe2b2bb142142b995d133c3ee535c89d459b#workspace:packages/yarnpkg-cli", "virtual:e3ce0ce4b7f0796ca44011528cb9cdc133fc62a76363fea6de68497bae04bdbe5a6dd47e6b9f23c282eb8e4533d75e96cf378c943d07a4e78aae0b715f06a450#workspace:packages/yarnpkg-cli", "virtual:ef8e1544cc953676e27fe7445218564293b5a190d023e4610c14767688870b772297269e2848a1d8d72f54605aacc9da3b2b7dc56dca754d297b70b14e6a665e#workspace:packages/yarnpkg-cli", "virtual:f4e4f4a9a0213f122880195b39adaee7de5cb560c1d806ebc8bace6a3124e5b8f820bbb89ebecd4d535caeb6f527d343143210aa405689c118ff2813b78998a0#workspace:packages/yarnpkg-cli", "workspace:packages/yarnpkg-cli"]],\ @@ -9627,6 +9628,7 @@ const RAW_RUNTIME_STATE = ["@types/yarnpkg__fslib", null],\ ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"],\ ["@yarnpkg/libzip", "virtual:b73ceab179a3b4f89c4a5be81bd0c20a80eda623489cb284f304cc8104dbb771916bbc246d0ba809faebd8459cb6554cf114954badb021279ea7aee216456122#workspace:packages/yarnpkg-libzip"],\ + ["globby", "npm:11.1.0"],\ ["prettier", "npm:1.19.1"],\ ["tslib", "npm:2.6.2"]\ ],\ @@ -9643,6 +9645,7 @@ const RAW_RUNTIME_STATE = ["@types/prettier", "npm:1.19.0"],\ ["@yarnpkg/fslib", "workspace:packages/yarnpkg-fslib"],\ ["@yarnpkg/libzip", "workspace:packages/yarnpkg-libzip"],\ + ["globby", "npm:11.1.0"],\ ["prettier", "npm:1.19.1"],\ ["tslib", "npm:2.6.2"]\ ],\ @@ -41732,14 +41735,16 @@ class ZipOpenFS extends MountFS { return new ZipFS(p, { baseFs, readOnly: readOnlyArchives, - stats: baseFs.statSync(p) + stats: baseFs.statSync(p), + customZipImplementation: opts.customZipImplementation }); }; const factoryPromise = async (baseFs, p) => { const zipOptions = { baseFs, readOnly: readOnlyArchives, - stats: await baseFs.statPromise(p) + stats: await baseFs.statPromise(p), + customZipImplementation: opts.customZipImplementation }; return () => { return new ZipFS(p, zipOptions); @@ -41754,6 +41759,246 @@ class ZipOpenFS extends MountFS { } } +class LibzipError extends Error { + code; + constructor(message, code) { + super(message); + this.name = `Libzip Error`; + this.code = code; + } +} +class LibZipImpl { + libzip; + lzSource; + zip; + /** + * A cache of indices mapped to file sources. + * Populated by `setFileSource` calls. + * Required for supporting read after write. + */ + fileSources = /* @__PURE__ */ new Map(); + listings; + symlinkCount; + constructor(opts) { + const buffer = `buffer` in opts ? opts.buffer : opts.baseFs.readFileSync(opts.path); + this.libzip = getInstance(); + const errPtr = this.libzip.malloc(4); + try { + let flags = 0; + if (opts.readOnly) + flags |= this.libzip.ZIP_RDONLY; + const lzSource = this.allocateUnattachedSource(buffer); + try { + this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); + this.lzSource = lzSource; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + if (this.zip === 0) { + const error = this.libzip.struct.errorS(); + this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); + throw this.makeLibzipError(error); + } + } finally { + this.libzip.free(errPtr); + } + const entryCount = this.libzip.getNumEntries(this.zip, 0); + const listings = new Array(entryCount); + for (let t = 0; t < entryCount; ++t) + listings[t] = this.libzip.getName(this.zip, t, 0); + this.listings = listings; + this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); + if (this.symlinkCount === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + getSymlinkCount() { + return this.symlinkCount; + } + getListings() { + return this.listings; + } + stat(entry) { + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statSize(stat) >>> 0; + const mtime = this.libzip.struct.statMtime(stat) >>> 0; + const crc = this.libzip.struct.statCrc(stat) >>> 0; + return { size, mtime, crc }; + } + makeLibzipError(error) { + const errorCode = this.libzip.struct.errorCodeZip(error); + const strerror = this.libzip.error.strerror(error); + const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); + if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) + throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); + return libzipError; + } + setFileSource(target, compression, buffer) { + const lzSource = this.allocateSource(buffer); + try { + const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); + if (newIndex === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (compression !== null) { + const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, compression[0], compression[1]); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + this.fileSources.set(newIndex, buffer); + return newIndex; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + setMtime(entry, mtime) { + const rc = this.libzip.file.setMtime(this.zip, entry, 0, mtime, 0); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + getExternalAttributes(index) { + const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (attrs === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 0; + return [opsys, attributes]; + } + setExternalAttributes(index, opsys, attributes) { + const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, opsys, attributes); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + locate(name) { + return this.libzip.name.locate(this.zip, name, 0); + } + getFileSource(index) { + const cachedFileSource = this.fileSources.get(index); + if (typeof cachedFileSource !== `undefined`) + return { data: cachedFileSource, compressionMethod: 0 }; + const stat = this.libzip.struct.statS(); + const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + const size = this.libzip.struct.statCompSize(stat); + const compressionMethod = this.libzip.struct.statCompMethod(stat); + const buffer = this.libzip.malloc(size); + try { + const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); + if (file === 0) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + try { + const rc2 = this.libzip.fread(file, buffer, size, 0); + if (rc2 === -1) + throw this.makeLibzipError(this.libzip.file.getError(file)); + else if (rc2 < size) + throw new Error(`Incomplete read`); + else if (rc2 > size) + throw new Error(`Overread`); + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + return { data, compressionMethod }; + } finally { + this.libzip.fclose(file); + } + } finally { + this.libzip.free(buffer); + } + } + deleteEntry(index) { + this.fileSources.delete(index); + const rc = this.libzip.delete(this.zip, index); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + addDirectory(path) { + const index = this.libzip.dir.add(this.zip, path); + if (index === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + return index; + } + getBufferAndClose() { + try { + this.libzip.source.keep(this.lzSource); + if (this.libzip.close(this.zip) === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + if (this.libzip.source.open(this.lzSource) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const size = this.libzip.source.tell(this.lzSource); + if (size === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + const buffer = this.libzip.malloc(size); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + try { + const rc = this.libzip.source.read(this.lzSource, buffer, size); + if (rc === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); + if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) + result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); + return result; + } finally { + this.libzip.free(buffer); + } + } finally { + this.libzip.source.close(this.lzSource); + this.libzip.source.free(this.lzSource); + } + } + allocateBuffer(content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = this.libzip.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + return { buffer, byteLength: content.byteLength }; + } + allocateUnattachedSource(content) { + const error = this.libzip.struct.errorS(); + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); + if (source === 0) { + this.libzip.free(error); + throw this.makeLibzipError(error); + } + return source; + } + allocateSource(content) { + const { buffer, byteLength } = this.allocateBuffer(content); + const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); + if (source === 0) { + this.libzip.free(buffer); + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + return source; + } + discard() { + this.libzip.discard(this.zip); + } +} + +const ZIP_UNIX = 3; +const STORE = 0; +const DEFLATE = 8; const DEFAULT_COMPRESSION_LEVEL = `mixed`; function toUnixTimestamp(time) { if (typeof time === `string` && String(+time) === time) @@ -41795,30 +42040,14 @@ function makeEmptyArchive() { 0 ]); } -class LibzipError extends Error { - code; - constructor(message, code) { - super(message); - this.name = `Libzip Error`; - this.code = code; - } -} class ZipFS extends BasePortableFakeFS { - libzip; baseFs; path; stats; - zip; - lzSource; level; + zipImpl; listings = /* @__PURE__ */ new Map(); entries = /* @__PURE__ */ new Map(); - /** - * A cache of indices mapped to file sources. - * Populated by `setFileSource` calls. - * Required for supporting read after write. - */ - fileSources = /* @__PURE__ */ new Map(); symlinkCount; fds = /* @__PURE__ */ new Map(); nextFd = 0; @@ -41826,9 +42055,11 @@ class ZipFS extends BasePortableFakeFS { readOnly = false; constructor(source, opts = {}) { super(); + if (opts.readOnly) + this.readOnly = true; const pathOptions = opts; this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; - source ??= makeEmptyArchive(); + const ZipImplCls = opts.customZipImplementation ?? LibZipImpl; if (typeof source === `string`) { const { baseFs = new NodeFS() } = pathOptions; this.baseFs = baseFs; @@ -41854,36 +42085,19 @@ class ZipFS extends BasePortableFakeFS { this.stats = makeDefaultStats(); } } - this.libzip = getInstance(); - const errPtr = this.libzip.malloc(4); - try { - let flags = 0; - if (opts.readOnly) { - flags |= this.libzip.ZIP_RDONLY; - this.readOnly = true; - } - if (typeof source === `string`) - source = pathOptions.create ? makeEmptyArchive() : this.baseFs.readFileSync(source); - const lzSource = this.allocateUnattachedSource(source); - try { - this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); - this.lzSource = lzSource; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } - if (this.zip === 0) { - const error = this.libzip.struct.errorS(); - this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); - throw this.makeLibzipError(error); + if (typeof source === `string`) { + if (opts.create) { + this.zipImpl = new ZipImplCls({ buffer: makeEmptyArchive(), readOnly: this.readOnly }); + } else { + this.zipImpl = new ZipImplCls({ path: source, baseFs: this.baseFs, readOnly: this.readOnly, size: this.stats.size }); } - } finally { - this.libzip.free(errPtr); + } else { + this.zipImpl = new ZipImplCls({ buffer: source ?? makeEmptyArchive(), readOnly: this.readOnly }); } this.listings.set(PortablePath.root, /* @__PURE__ */ new Set()); - const entryCount = this.libzip.getNumEntries(this.zip, 0); - for (let t = 0; t < entryCount; ++t) { - const raw = this.libzip.getName(this.zip, t, 0); + const listings = this.zipImpl.getListings(); + for (let t = 0; t < listings.length; t++) { + const raw = listings[t]; if (ppath.isAbsolute(raw)) continue; const p = ppath.resolve(PortablePath.root, raw); @@ -41892,19 +42106,9 @@ class ZipFS extends BasePortableFakeFS { this.registerListing(p); } } - this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); - if (this.symlinkCount === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.symlinkCount = this.zipImpl.getSymlinkCount(); this.ready = true; } - makeLibzipError(error) { - const errorCode = this.libzip.struct.errorCodeZip(error); - const strerror = this.libzip.error.strerror(error); - const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); - if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) - throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); - return libzipError; - } getExtractHint(hints) { for (const fileName of this.entries.keys()) { const ext = this.pathUtils.extname(fileName); @@ -41934,45 +42138,14 @@ class ZipFS extends BasePortableFakeFS { return makeEmptyArchive(); } try { - this.libzip.source.keep(this.lzSource); - if (this.libzip.close(this.zip) === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (this.libzip.source.open(this.lzSource) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - const size = this.libzip.source.tell(this.lzSource); - if (size === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - const buffer = this.libzip.malloc(size); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - try { - const rc = this.libzip.source.read(this.lzSource, buffer, size); - if (rc === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - else if (rc < size) - throw new Error(`Incomplete read`); - else if (rc > size) - throw new Error(`Overread`); - let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); - if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) - result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); - return result; - } finally { - this.libzip.free(buffer); - } + return this.zipImpl.getBufferAndClose(); } finally { - this.libzip.source.close(this.lzSource); - this.libzip.source.free(this.lzSource); this.ready = false; } } discardAndClose() { this.prepareClose(); - this.libzip.discard(this.zip); + this.zipImpl.discard(); this.ready = false; } saveAndClose() { @@ -42226,16 +42399,14 @@ class ZipFS extends BasePortableFakeFS { statImpl(reason, p, opts = {}) { const entry = this.entries.get(p); if (typeof entry !== `undefined`) { - const stat = this.libzip.struct.statS(); - const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + const stat = this.zipImpl.stat(entry); + const crc = stat.crc; + const size = stat.size; + const mtimeMs = stat.mtime * 1e3; const uid = this.stats.uid; const gid = this.stats.gid; - const size = this.libzip.struct.statSize(stat) >>> 0; const blksize = 512; - const blocks = Math.ceil(size / blksize); - const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3; + const blocks = Math.ceil(stat.size / blksize); const atimeMs = mtimeMs; const birthtimeMs = mtimeMs; const ctimeMs = mtimeMs; @@ -42246,7 +42417,6 @@ class ZipFS extends BasePortableFakeFS { const type = this.listings.has(p) ? fs.constants.S_IFDIR : this.isSymbolicLink(entry) ? fs.constants.S_IFLNK : fs.constants.S_IFREG; const defaultMode = type === fs.constants.S_IFDIR ? 493 : 420; const mode = type | this.getUnixMode(entry, defaultMode) & 511; - const crc = this.libzip.struct.statCrc(stat); const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc }); return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance; } @@ -42272,13 +42442,10 @@ class ZipFS extends BasePortableFakeFS { throw new Error(`Unreachable`); } getUnixMode(index, defaultMode) { - const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + const [opsys, attributes] = this.zipImpl.getExternalAttributes(index); + if (opsys !== ZIP_UNIX) return defaultMode; - return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + return attributes >>> 16; } registerListing(p) { const existingListing = this.listings.get(p); @@ -42306,17 +42473,13 @@ class ZipFS extends BasePortableFakeFS { this.entries.delete(p); if (typeof entry === `undefined`) return; - this.fileSources.delete(entry); if (this.isSymbolicLink(entry)) { this.symlinkCount--; } } deleteEntry(p, index) { this.unregisterEntry(p); - const rc = this.libzip.delete(this.zip, index); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } + this.zipImpl.deleteEntry(index); } resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) { if (!this.ready) @@ -42349,7 +42512,7 @@ class ZipFS extends BasePortableFakeFS { resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP)); if (!resolveLastComponent || this.symlinkCount === 0) break; - const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0); + const index = this.zipImpl.locate(resolvedP.slice(1)); if (index === -1) break; if (this.isSymbolicLink(index)) { @@ -42361,118 +42524,46 @@ class ZipFS extends BasePortableFakeFS { } return resolvedP; } - allocateBuffer(content) { - if (!Buffer.isBuffer(content)) - content = Buffer.from(content); - const buffer = this.libzip.malloc(content.byteLength); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); - heap.set(content); - return { buffer, byteLength: content.byteLength }; - } - allocateUnattachedSource(content) { - const error = this.libzip.struct.errorS(); - const { buffer, byteLength } = this.allocateBuffer(content); - const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); - if (source === 0) { - this.libzip.free(error); - throw this.makeLibzipError(error); - } - return source; - } - allocateSource(content) { - const { buffer, byteLength } = this.allocateBuffer(content); - const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); - if (source === 0) { - this.libzip.free(buffer); - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - return source; - } setFileSource(p, content) { const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content); const target = ppath.relative(PortablePath.root, p); - const lzSource = this.allocateSource(content); - try { - const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); - if (newIndex === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - if (this.level !== `mixed`) { - const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE; - const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } - this.fileSources.set(newIndex, buffer); - return newIndex; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; + let compression = null; + if (this.level !== `mixed`) { + const method = this.level === 0 ? STORE : DEFLATE; + compression = [method, this.level]; } + const newIndex = this.zipImpl.setFileSource(target, compression, buffer); + return newIndex; } isSymbolicLink(index) { if (this.symlinkCount === 0) return false; - const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (attrs === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + const [opsys, attrs] = this.zipImpl.getExternalAttributes(index); + if (opsys !== ZIP_UNIX) return false; - const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + const attributes = attrs >>> 16; return (attributes & fs.constants.S_IFMT) === fs.constants.S_IFLNK; } getFileSource(index, opts = { asyncDecompress: false }) { - const cachedFileSource = this.fileSources.get(index); - if (typeof cachedFileSource !== `undefined`) - return cachedFileSource; - const stat = this.libzip.struct.statS(); - const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const size = this.libzip.struct.statCompSize(stat); - const compressionMethod = this.libzip.struct.statCompMethod(stat); - const buffer = this.libzip.malloc(size); - try { - const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); - if (file === 0) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - try { - const rc2 = this.libzip.fread(file, buffer, size, 0); - if (rc2 === -1) - throw this.makeLibzipError(this.libzip.file.getError(file)); - else if (rc2 < size) - throw new Error(`Incomplete read`); - else if (rc2 > size) - throw new Error(`Overread`); - const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); - const data = Buffer.from(memory); - if (compressionMethod === 0) { - this.fileSources.set(index, data); - return data; - } else if (opts.asyncDecompress) { - return new Promise((resolve, reject) => { - zlib__default.default.inflateRaw(data, (error, result) => { - if (error) { - reject(error); - } else { - this.fileSources.set(index, result); - resolve(result); - } - }); + const { data, compressionMethod } = this.zipImpl.getFileSource(index); + if (compressionMethod === STORE) { + return data; + } else if (compressionMethod === DEFLATE) { + if (opts.asyncDecompress) { + return new Promise((resolve, reject) => { + zlib__default.default.inflateRaw(data, (error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } }); - } else { - const decompressedData = zlib__default.default.inflateRawSync(data); - this.fileSources.set(index, decompressedData); - return decompressedData; - } - } finally { - this.libzip.fclose(file); + }); + } else { + return zlib__default.default.inflateRawSync(data); } - } finally { - this.libzip.free(buffer); + } else { + throw new Error(`Unsupported compression method: ${compressionMethod}`); } } async fchmodPromise(fd, mask) { @@ -42494,10 +42585,7 @@ class ZipFS extends BasePortableFakeFS { throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`); const oldMod = this.getUnixMode(entry, fs.constants.S_IFREG | 0); const newMod = oldMod & ~511 | mask; - const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } + this.zipImpl.setExternalAttributes(entry, ZIP_UNIX, newMod << 16); } async fchownPromise(fd, uid, gid) { return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid); @@ -42671,10 +42759,7 @@ class ZipFS extends BasePortableFakeFS { const entry = this.entries.get(resolvedP); if (entry === void 0) throw new Error(`Unreachable`); - const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } + this.zipImpl.setMtime(entry, toUnixTimestamp(mtime)); } async mkdirPromise(p, opts) { return this.mkdirSync(p, opts); @@ -42734,9 +42819,7 @@ class ZipFS extends BasePortableFakeFS { this.deleteEntry(p, index); } hydrateDirectory(resolvedP) { - const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP)); - if (index === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + const index = this.zipImpl.addDirectory(ppath.relative(PortablePath.root, resolvedP)); this.registerListing(resolvedP); this.registerEntry(resolvedP, index); return index; @@ -42760,9 +42843,7 @@ class ZipFS extends BasePortableFakeFS { throw EEXIST(`symlink '${target}' -> '${p}'`); const index = this.setFileSource(resolvedP, target); this.registerEntry(resolvedP, index); - const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (fs.constants.S_IFLNK | 511) << 16); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.zipImpl.setExternalAttributes(index, ZIP_UNIX, (fs.constants.S_IFLNK | 511) << 16); this.symlinkCount += 1; } async readFilePromise(p, encoding) { @@ -42917,10 +42998,13 @@ class ZipFS extends BasePortableFakeFS { } }; const interval = setInterval(() => { }, 24 * 60 * 60 * 1e3); - return { on: () => { - }, close: () => { - clearInterval(interval); - } }; + return { + on: () => { + }, + close: () => { + clearInterval(interval); + } + }; } watchFile(p, a, b) { const resolvedP = ppath.resolve(PortablePath.root, p); @@ -42932,6 +43016,188 @@ class ZipFS extends BasePortableFakeFS { } } +const SIGNATURE = { + CENTRAL_DIRECTORY: 33639248, + END_OF_CENTRAL_DIRECTORY: 101010256 +}; +const noCommentCDSize = 22; +class JsZipImpl { + fd; + baseFs; + entries; + constructor(opts) { + if (`buffer` in opts) + throw new Error(`Buffer based zip archives are not supported`); + if (!opts.readOnly) + throw new Error(`Writable zip archives are not supported`); + this.baseFs = opts.baseFs; + this.fd = this.baseFs.openSync(opts.path, `r`); + this.entries = JsZipImpl.readZipSync(this.fd, this.baseFs, opts.size); + } + static readZipSync(fd, baseFs, fileSize) { + if (fileSize < noCommentCDSize) + throw new Error(`Invalid ZIP file: EOCD not found`); + let eocdOffset = -1; + let eocdBuffer = Buffer.alloc(noCommentCDSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + noCommentCDSize, + fileSize - noCommentCDSize + ); + if (eocdBuffer.readUInt32LE(0) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = 0; + } else { + const bufferSize = Math.min(65557, fileSize); + eocdBuffer = Buffer.alloc(bufferSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + bufferSize, + Math.max(0, fileSize - bufferSize) + ); + for (let i = eocdBuffer.length - 4; i >= 0; i--) { + if (eocdBuffer.readUInt32LE(i) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = i; + break; + } + } + if (eocdOffset === -1) { + throw new Error(`Not a zip archive`); + } + } + const totalEntries = eocdBuffer.readUInt16LE(eocdOffset + 10); + const centralDirSize = eocdBuffer.readUInt32LE(eocdOffset + 12); + const centralDirOffset = eocdBuffer.readUInt32LE(eocdOffset + 16); + const commentLength = eocdBuffer.readUInt16LE(eocdOffset + 20); + if (eocdOffset + commentLength + noCommentCDSize > eocdBuffer.length) + throw new Error(`Zip archive inconsistent`); + if (totalEntries == 65535 || centralDirSize == 4294967295 || centralDirOffset == 4294967295) + throw new Error(`Zip 64 is not supported`); + if (centralDirSize > fileSize) + throw new Error(`Zip archive inconsistent`); + if (totalEntries > centralDirSize / 46) + throw new Error(`Zip archive inconsistent`); + const cdBuffer = Buffer.alloc(centralDirSize); + if (baseFs.readSync(fd, cdBuffer, 0, cdBuffer.length, centralDirOffset) !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + const entries = []; + let offset = 0; + let index = 0; + let sumCompressedSize = 0; + while (index < totalEntries) { + if (offset + 46 > cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + if (cdBuffer.readUInt32LE(offset) !== SIGNATURE.CENTRAL_DIRECTORY) + throw new Error(`Zip archive inconsistent`); + const versionMadeBy = cdBuffer.readUInt16LE(offset + 4); + const os = versionMadeBy >>> 8; + const flags = cdBuffer.readUInt16LE(offset + 8); + if ((flags & 1) !== 0) + throw new Error(`Encrypted zip files are not supported`); + const compressionMethod = cdBuffer.readUInt16LE(offset + 10); + const crc = cdBuffer.readUInt32LE(offset + 16); + const nameLength = cdBuffer.readUInt16LE(offset + 28); + const extraLength = cdBuffer.readUInt16LE(offset + 30); + const commentLength2 = cdBuffer.readUInt16LE(offset + 32); + const localHeaderOffset = cdBuffer.readUInt32LE(offset + 42); + const name = cdBuffer.toString(`utf8`, offset + 46, offset + 46 + nameLength).replaceAll(`\0`, ` `); + if (name.includes(`\0`)) + throw new Error(`Invalid ZIP file`); + const compressedSize = cdBuffer.readUInt32LE(offset + 20); + const externalAttributes = cdBuffer.readUInt32LE(offset + 38); + entries.push({ + name, + os, + mtime: SAFE_TIME, + //we dont care, + crc, + compressionMethod, + isSymbolicLink: os === ZIP_UNIX && (externalAttributes >>> 16 & S_IFMT) === S_IFLNK, + size: cdBuffer.readUInt32LE(offset + 24), + compressedSize, + externalAttributes, + localHeaderOffset + }); + sumCompressedSize += compressedSize; + index += 1; + offset += 46 + nameLength + extraLength + commentLength2; + } + if (sumCompressedSize > fileSize) + throw new Error(`Zip archive inconsistent`); + if (offset !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + return entries; + } + getExternalAttributes(index) { + const entry = this.entries[index]; + return [entry.os, entry.externalAttributes]; + } + getListings() { + return this.entries.map((e) => e.name); + } + getSymlinkCount() { + let count = 0; + for (const entry of this.entries) + if (entry.isSymbolicLink) + count += 1; + return count; + } + stat(index) { + const entry = this.entries[index]; + return { + crc: entry.crc, + mtime: entry.mtime, + size: entry.size + }; + } + locate(name) { + for (let ind = 0; ind < this.entries.length; ind++) + if (this.entries[ind].name === name) + return ind; + return -1; + } + getFileSource(index) { + const entry = this.entries[index]; + const localHeaderBuf = Buffer.alloc(30); + this.baseFs.readSync( + this.fd, + localHeaderBuf, + 0, + localHeaderBuf.length, + entry.localHeaderOffset + ); + const nameLength = localHeaderBuf.readUInt16LE(26); + const extraLength = localHeaderBuf.readUInt16LE(28); + const buffer = Buffer.alloc(entry.compressedSize); + if (this.baseFs.readSync(this.fd, buffer, 0, entry.compressedSize, entry.localHeaderOffset + 30 + nameLength + extraLength) !== entry.compressedSize) + throw new Error(`Invalid ZIP file`); + return { data: buffer, compressionMethod: entry.compressionMethod }; + } + discard() { + } + addDirectory(path) { + throw new Error(`Not implemented`); + } + deleteEntry(index) { + throw new Error(`Not implemented`); + } + setMtime(index, mtime) { + throw new Error(`Not implemented`); + } + getBufferAndClose() { + throw new Error(`Not implemented`); + } + setFileSource(target, compression, buffer) { + throw new Error(`Not implemented`); + } + setExternalAttributes(index, opsys, attributes) { + throw new Error(`Not implemented`); + } +} + setFactory(() => { const emZip = createModule(); return makeInterface(emZip); @@ -43282,6 +43548,7 @@ function hydrateRuntimeState(data, { basePath }) { dependencyTreeRoots, enableTopLevelFallback, fallbackExclusionList, + pnpZipBackend: data.pnpZipBackend, fallbackPool, ignorePattern, packageLocatorsByLocations, @@ -44938,8 +45205,10 @@ const localFs = { ...fs__default.default }; const nodeFs = new NodeFS(localFs); const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); const defaultPnpapiResolution = __filename; +const customZipImplementation = defaultRuntimeState.pnpZipBackend === `js` ? JsZipImpl : void 0; const defaultFsLayer = new VirtualFS({ baseFs: new ZipOpenFS({ + customZipImplementation, baseFs: nodeFs, maxOpenFiles: 80, readOnlyArchives: true diff --git a/.yarn/versions/01575767.yml b/.yarn/versions/01575767.yml new file mode 100644 index 000000000000..b0a926c54630 --- /dev/null +++ b/.yarn/versions/01575767.yml @@ -0,0 +1,31 @@ +releases: + "@yarnpkg/cli": minor + "@yarnpkg/libzip": minor + "@yarnpkg/plugin-pnp": minor + "@yarnpkg/pnp": minor + +declined: + - "@yarnpkg/plugin-compat" + - "@yarnpkg/plugin-constraints" + - "@yarnpkg/plugin-dlx" + - "@yarnpkg/plugin-essentials" + - "@yarnpkg/plugin-file" + - "@yarnpkg/plugin-init" + - "@yarnpkg/plugin-interactive-tools" + - "@yarnpkg/plugin-nm" + - "@yarnpkg/plugin-npm-cli" + - "@yarnpkg/plugin-pack" + - "@yarnpkg/plugin-patch" + - "@yarnpkg/plugin-pnpm" + - "@yarnpkg/plugin-stage" + - "@yarnpkg/plugin-typescript" + - "@yarnpkg/plugin-version" + - "@yarnpkg/plugin-workspace-tools" + - vscode-zipfs + - "@yarnpkg/builder" + - "@yarnpkg/core" + - "@yarnpkg/doctor" + - "@yarnpkg/fslib" + - "@yarnpkg/nm" + - "@yarnpkg/pnpify" + - "@yarnpkg/sdks" diff --git a/.yarnrc.yml b/.yarnrc.yml index a9feaf4fa045..8125fe79101a 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -15,6 +15,8 @@ immutablePatterns: initScope: yarnpkg +pnpZipBackend: js + npmPublishAccess: public packageExtensions: diff --git a/packages/acceptance-tests/pkg-tests-specs/sources/basic.test.js b/packages/acceptance-tests/pkg-tests-specs/sources/basic.test.js index 9974a99a2503..d84e8106ab5b 100644 --- a/packages/acceptance-tests/pkg-tests-specs/sources/basic.test.js +++ b/packages/acceptance-tests/pkg-tests-specs/sources/basic.test.js @@ -5,6 +5,9 @@ const { const configs = [{ nodeLinker: `pnp`, +}, { + nodeLinker: `pnp`, + pnpZipBackend: `js`, }, { nodeLinker: `pnpm`, }, { @@ -13,7 +16,7 @@ const configs = [{ describe(`Basic tests`, () => { for (const config of configs) { - describe(`w/ the ${config.nodeLinker} linker`, () => { + describe(`w/ the ${config.nodeLinker} linker${config.pnpZipBackend ? ` and ${config.pnpZipBackend} zip backend` : ``}`, () => { test( `it should correctly handle browser fields in package.json`, makeTemporaryEnv( diff --git a/packages/plugin-pnp/sources/PnpLinker.ts b/packages/plugin-pnp/sources/PnpLinker.ts index 8da8c4abd36e..005590680053 100644 --- a/packages/plugin-pnp/sources/PnpLinker.ts +++ b/packages/plugin-pnp/sources/PnpLinker.ts @@ -267,6 +267,7 @@ export class PnpInstaller implements Installer { const ignorePattern = miscUtils.buildIgnorePattern([`.yarn/sdks/**`, ...this.opts.project.configuration.get(`pnpIgnorePatterns`)]); const packageRegistry = this.packageRegistry; const shebang = this.opts.project.configuration.get(`pnpShebang`); + const pnpZipBackend = this.opts.project.configuration.get(`pnpZipBackend`); if (pnpFallbackMode === `dependencies-only`) for (const pkg of this.opts.project.storedPackages.values()) @@ -281,6 +282,7 @@ export class PnpInstaller implements Installer { fallbackExclusionList, fallbackPool, ignorePattern, + pnpZipBackend, packageRegistry, shebang, }); diff --git a/packages/plugin-pnp/sources/index.ts b/packages/plugin-pnp/sources/index.ts index 857485dc5133..58e5034b8971 100644 --- a/packages/plugin-pnp/sources/index.ts +++ b/packages/plugin-pnp/sources/index.ts @@ -1,6 +1,7 @@ import {Hooks as CoreHooks, Plugin, Project, SettingsType, WindowsLinkType} from '@yarnpkg/core'; import {Filename, PortablePath, npath, ppath, xfs} from '@yarnpkg/fslib'; import {Hooks as StageHooks} from '@yarnpkg/plugin-stage'; +import {PnpZipBackend} from '@yarnpkg/pnp'; import {pathToFileURL} from 'url'; import {PnpLinker} from './PnpLinker'; @@ -70,12 +71,14 @@ declare module '@yarnpkg/core' { nodeLinker: string; winLinkType: string; pnpMode: string; + minizip: boolean; pnpShebang: string; pnpIgnorePatterns: Array; pnpEnableEsmLoader: boolean; pnpEnableInlining: boolean; pnpFallbackMode: string; pnpUnpluggedFolder: PortablePath; + pnpZipBackend: PnpZipBackend; } } @@ -90,6 +93,11 @@ const plugin: Plugin = { type: SettingsType.STRING, default: `pnp`, }, + minizip: { + description: `Whether Yarn should use minizip to extract archives`, + type: SettingsType.BOOLEAN, + default: false, + }, winLinkType: { description: `Whether Yarn should use Windows Junctions or symlinks when creating links on Windows.`, type: SettingsType.STRING, @@ -115,6 +123,15 @@ const plugin: Plugin = { default: [], isArray: true, }, + pnpZipBackend: { + description: `Whether to use the experimental js implementation for the ZipFS`, + type: SettingsType.STRING, + values: [ + `libzip`, + `js`, + ], + default: `libzip`, + }, pnpEnableEsmLoader: { description: `If true, Yarn will generate an ESM loader (\`.pnp.loader.mjs\`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.`, type: SettingsType.BOOLEAN, diff --git a/packages/yarnpkg-libzip/package.json b/packages/yarnpkg-libzip/package.json index cb916cb00d2f..634f25fd6b1f 100644 --- a/packages/yarnpkg-libzip/package.json +++ b/packages/yarnpkg-libzip/package.json @@ -38,6 +38,7 @@ }, "devDependencies": { "@types/prettier": "1.19.0", + "globby": "^11.0.1", "prettier": "^1.19.1" }, "dependencies": { diff --git a/packages/yarnpkg-libzip/sources/ZipFS.ts b/packages/yarnpkg-libzip/sources/ZipFS.ts index 541941b22f08..adeb7a12cce9 100644 --- a/packages/yarnpkg-libzip/sources/ZipFS.ts +++ b/packages/yarnpkg-libzip/sources/ZipFS.ts @@ -7,18 +7,27 @@ import {opendir} import {watchFile, unwatchFile, unwatchAllFiles} from '@yarnpkg/fslib'; import {errors, statUtils} from '@yarnpkg/fslib'; import {FSPath, PortablePath, ppath, Filename} from '@yarnpkg/fslib'; -import {Libzip} from '@yarnpkg/libzip'; import {ReadStream, WriteStream, constants} from 'fs'; import {PassThrough} from 'stream'; import {types} from 'util'; import zlib from 'zlib'; -import {getInstance} from './instance'; +import {LibZipImpl} from './libzipImpl'; + +export const ZIP_UNIX = 3; + +export const STORE = 0; +export const DEFLATE = 8; + export type ZipCompression = `mixed` | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; export const DEFAULT_COMPRESSION_LEVEL: ZipCompression = `mixed`; +export type CompressionData = [compressionMethod: number, level: number] | null; + + export type ZipBufferOptions = { + customZipImplementation?: ZipImplementationClass; readOnly?: boolean; stats?: Stats; level?: ZipCompression; @@ -59,36 +68,47 @@ export function makeEmptyArchive() { ]); } -export class LibzipError extends Error { - code: string; - constructor(message: string, code: string) { - super(message); - this.name = `Libzip Error`; - this.code = code; - } +export interface Stat { + mtime: number; + crc: number; + size: number; } -export class ZipFS extends BasePortableFakeFS { - private readonly libzip: Libzip; +export interface ZipImpl { + deleteEntry(index: number): void; + getFileSource(index: number): {data: Buffer, compressionMethod: number}; + setFileSource(target: PortablePath, compression: CompressionData, buffer: Buffer): number; + setMtime(index: number, mtime: number): void; + addDirectory(path: string): number; + setExternalAttributes(index: number, opsys: number, attributes: number): void; + getExternalAttributes(index: number): [opsys: number, attributes: number]; + getSymlinkCount(): number; + getListings(): Array; + stat(entry: number): Stat; + getBufferAndClose(): Buffer; + locate(name: string): number; + discard(): void; +} + +export type ZipImplInput = {path: PortablePath, baseFs: FakeFS, readOnly: boolean, size: number} | {buffer: Buffer, readOnly: boolean}; + +export interface ZipImplementationClass { + new(input: ZipImplInput): ZipImpl; +} +export class ZipFS extends BasePortableFakeFS { private readonly baseFs: FakeFS | null; private readonly path: PortablePath | null; private readonly stats: Stats; - private readonly zip: number; - private readonly lzSource: number; private readonly level: ZipCompression; + private readonly zipImpl: ZipImpl; + private readonly listings: Map> = new Map(); private readonly entries: Map = new Map(); - /** - * A cache of indices mapped to file sources. - * Populated by `setFileSource` calls. - * Required for supporting read after write. - */ - private readonly fileSources: Map = new Map(); private symlinkCount: number; @@ -109,12 +129,16 @@ export class ZipFS extends BasePortableFakeFS { constructor(source?: PortablePath | Buffer | null, opts: ZipPathOptions | ZipBufferOptions = {}) { super(); + if (opts.readOnly) + this.readOnly = true; + + const pathOptions = opts as ZipPathOptions; this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL; - source ??= makeEmptyArchive(); + const ZipImplCls = opts.customZipImplementation ?? LibZipImpl; if (typeof source === `string`) { const {baseFs = new NodeFS()} = pathOptions; @@ -143,48 +167,21 @@ export class ZipFS extends BasePortableFakeFS { } } - this.libzip = getInstance(); - - const errPtr = this.libzip.malloc(4); - - try { - let flags = 0; - - if (opts.readOnly) { - flags |= this.libzip.ZIP_RDONLY; - this.readOnly = true; - } - - if (typeof source === `string`) - source = pathOptions.create - ? makeEmptyArchive() - : this.baseFs!.readFileSync(source); - - const lzSource = this.allocateUnattachedSource(source); - - try { - this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); - this.lzSource = lzSource; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } - - if (this.zip === 0) { - const error = this.libzip.struct.errorS(); - this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); - - throw this.makeLibzipError(error); + if (typeof source === `string`) { + if ((opts as ZipPathOptions).create) { + this.zipImpl = new ZipImplCls({buffer: makeEmptyArchive(), readOnly: this.readOnly}); + } else { + this.zipImpl = new ZipImplCls({path: source, baseFs: this.baseFs!, readOnly: this.readOnly, size: this.stats.size}); } - } finally { - this.libzip.free(errPtr); + } else { + this.zipImpl = new ZipImplCls({buffer: source ?? makeEmptyArchive(), readOnly: this.readOnly}); } this.listings.set(PortablePath.root, new Set()); - const entryCount = this.libzip.getNumEntries(this.zip, 0); - for (let t = 0; t < entryCount; ++t) { - const raw = this.libzip.getName(this.zip, t, 0) as PortablePath; + const listings = this.zipImpl.getListings(); + for (let t = 0; t < listings.length; t++) { + const raw = listings[t] as PortablePath; if (ppath.isAbsolute(raw)) continue; @@ -198,25 +195,11 @@ export class ZipFS extends BasePortableFakeFS { } } - this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); - if (this.symlinkCount === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + this.symlinkCount = this.zipImpl.getSymlinkCount(); this.ready = true; } - makeLibzipError(error: number) { - const errorCode = this.libzip.struct.errorCodeZip(error); - const strerror = this.libzip.error.strerror(error); - - const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); - - // This error should never come up because of the file source cache - if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) - throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); - - return libzipError; - } getExtractHint(hints: ExtractHintOptions) { for (const fileName of this.entries.keys()) { @@ -257,56 +240,8 @@ export class ZipFS extends BasePortableFakeFS { } try { - // Prevent close from cleaning up the source - this.libzip.source.keep(this.lzSource); - - // Close the zip archive - if (this.libzip.close(this.zip) === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - - // Open the source for reading - if (this.libzip.source.open(this.lzSource) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - - // Move to the end of source - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - - // Get the size of source - const size = this.libzip.source.tell(this.lzSource); - if (size === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - - // Move to the start of source - if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - - const buffer = this.libzip.malloc(size); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - - try { - const rc = this.libzip.source.read(this.lzSource, buffer, size); - - if (rc === -1) - throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); - else if (rc < size) - throw new Error(`Incomplete read`); - else if (rc > size) - throw new Error(`Overread`); - - let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); - - if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) - result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); - - return result; - } finally { - this.libzip.free(buffer); - } + return this.zipImpl.getBufferAndClose(); } finally { - this.libzip.source.close(this.lzSource); - this.libzip.source.free(this.lzSource); this.ready = false; } } @@ -314,7 +249,7 @@ export class ZipFS extends BasePortableFakeFS { discardAndClose() { this.prepareClose(); - this.libzip.discard(this.zip); + this.zipImpl.discard(); this.ready = false; } @@ -691,20 +626,16 @@ export class ZipFS extends BasePortableFakeFS { // File, or explicit directory if (typeof entry !== `undefined`) { - const stat = this.libzip.struct.statS(); - - const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - + const stat = this.zipImpl.stat(entry); + const crc = stat.crc; + const size = stat.size; + const mtimeMs = stat.mtime * 1000; const uid = this.stats.uid; const gid = this.stats.gid; - const size = (this.libzip.struct.statSize(stat) >>> 0); const blksize = 512; - const blocks = Math.ceil(size / blksize); + const blocks = Math.ceil(stat.size / blksize); - const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1000; const atimeMs = mtimeMs; const birthtimeMs = mtimeMs; const ctimeMs = mtimeMs; @@ -725,7 +656,6 @@ export class ZipFS extends BasePortableFakeFS { : 0o644; const mode = type | (this.getUnixMode(entry, defaultMode) & 0o777); - const crc = this.libzip.struct.statCrc(stat); const statInstance = Object.assign(new statUtils.StatEntry(), {uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc}); return opts.bigint === true ? statUtils.convertToBigIntStats(statInstance) : statInstance; @@ -761,15 +691,12 @@ export class ZipFS extends BasePortableFakeFS { } private getUnixMode(index: number, defaultMode: number) { - const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + const [opsys, attributes] = this.zipImpl.getExternalAttributes(index); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + if (opsys !== ZIP_UNIX) return defaultMode; - return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + return attributes >>> 16; } private registerListing(p: PortablePath) { @@ -809,8 +736,6 @@ export class ZipFS extends BasePortableFakeFS { if (typeof entry === `undefined`) return; - this.fileSources.delete(entry); - if (this.isSymbolicLink(entry)) { this.symlinkCount--; } @@ -819,10 +744,7 @@ export class ZipFS extends BasePortableFakeFS { private deleteEntry(p: PortablePath, index: number) { this.unregisterEntry(p); - const rc = this.libzip.delete(this.zip, index); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } + this.zipImpl.deleteEntry(index); } private resolveFilename(reason: string, p: PortablePath, resolveLastComponent?: boolean): PortablePath; @@ -866,7 +788,7 @@ export class ZipFS extends BasePortableFakeFS { if (!resolveLastComponent || this.symlinkCount === 0) break; - const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0); + const index = this.zipImpl.locate(resolvedP.slice(1)); if (index === -1) break; @@ -881,92 +803,37 @@ export class ZipFS extends BasePortableFakeFS { return resolvedP; } - private allocateBuffer(content: string | Buffer | ArrayBuffer | DataView) { - if (!Buffer.isBuffer(content)) - content = Buffer.from(content as any); - - const buffer = this.libzip.malloc(content.byteLength); - if (!buffer) - throw new Error(`Couldn't allocate enough memory`); - - // Copy the file into the Emscripten heap - const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); - heap.set(content as any); - - return {buffer, byteLength: content.byteLength}; - } - - private allocateUnattachedSource(content: string | Buffer | ArrayBuffer | DataView) { - const error = this.libzip.struct.errorS(); - - const {buffer, byteLength} = this.allocateBuffer(content); - const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); - - if (source === 0) { - this.libzip.free(error); - throw this.makeLibzipError(error); - } - - return source; - } - - private allocateSource(content: string | Buffer | ArrayBuffer | DataView) { - const {buffer, byteLength} = this.allocateBuffer(content); - const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); - - if (source === 0) { - this.libzip.free(buffer); - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - - return source; - } private setFileSource(p: PortablePath, content: string | Buffer | ArrayBuffer | DataView) { const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content as any); const target = ppath.relative(PortablePath.root, p); - const lzSource = this.allocateSource(content); - try { - const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); - if (newIndex === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - - if (this.level !== `mixed`) { - // Use store for level 0, and deflate for 1..9 - const method = this.level === 0 - ? this.libzip.ZIP_CM_STORE - : this.libzip.ZIP_CM_DEFLATE; - - const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } - } + let compression: CompressionData = null; + if (this.level !== `mixed`) { + // Use store for level 0, and deflate for 1..9 + const method = this.level === 0 + ? STORE + : DEFLATE; + compression = [method, this.level]; + } - this.fileSources.set(newIndex, buffer); + const newIndex = this.zipImpl.setFileSource(target, compression, buffer); - return newIndex; - } catch (error) { - this.libzip.source.free(lzSource); - throw error; - } + return newIndex; } private isSymbolicLink(index: number) { if (this.symlinkCount === 0) return false; - const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); - if (attrs === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; - if (opsys !== this.libzip.ZIP_OPSYS_UNIX) + const [opsys, attrs] = this.zipImpl.getExternalAttributes(index); + + if (opsys !== ZIP_UNIX) return false; - const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16; + const attributes = attrs >>> 16; return (attributes & constants.S_IFMT) === constants.S_IFLNK; } @@ -975,62 +842,25 @@ export class ZipFS extends BasePortableFakeFS { private getFileSource(index: number, opts: {asyncDecompress: true}): Promise; private getFileSource(index: number, opts: {asyncDecompress: boolean}): Promise | Buffer; private getFileSource(index: number, opts: {asyncDecompress: boolean} = {asyncDecompress: false}): Promise | Buffer { - const cachedFileSource = this.fileSources.get(index); - if (typeof cachedFileSource !== `undefined`) - return cachedFileSource; - - const stat = this.libzip.struct.statS(); - - const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - - const size = this.libzip.struct.statCompSize(stat); - const compressionMethod = this.libzip.struct.statCompMethod(stat); - const buffer = this.libzip.malloc(size); - - try { - const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); - if (file === 0) - throw this.makeLibzipError(this.libzip.getError(this.zip)); - - try { - const rc = this.libzip.fread(file, buffer, size, 0); - - if (rc === -1) - throw this.makeLibzipError(this.libzip.file.getError(file)); - else if (rc < size) - throw new Error(`Incomplete read`); - else if (rc > size) - throw new Error(`Overread`); - - const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); - const data = Buffer.from(memory); - - if (compressionMethod === 0) { - this.fileSources.set(index, data); - return data; - } else if (opts.asyncDecompress) { - return new Promise((resolve, reject) => { - zlib.inflateRaw(data, (error, result) => { - if (error) { - reject(error); - } else { - this.fileSources.set(index, result); - resolve(result); - } - }); + const {data, compressionMethod} = this.zipImpl.getFileSource(index); + if (compressionMethod === STORE) { + return data; + } else if (compressionMethod === DEFLATE) { + if (opts.asyncDecompress) { + return new Promise((resolve, reject) => { + zlib.inflateRaw(data, (error, result) => { + if (error) { + reject(error); + } else { + resolve(result); + } }); - } else { - const decompressedData = zlib.inflateRawSync(data); - this.fileSources.set(index, decompressedData); - return decompressedData; - } - } finally { - this.libzip.fclose(file); + }); + } else { + return zlib.inflateRawSync(data); } - } finally { - this.libzip.free(buffer); + } else { + throw new Error(`Unsupported compression method: ${compressionMethod}`); } } @@ -1062,10 +892,7 @@ export class ZipFS extends BasePortableFakeFS { const oldMod = this.getUnixMode(entry, constants.S_IFREG | 0o000); const newMod = oldMod & (~0o777) | mask; - const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } + this.zipImpl.setExternalAttributes(entry, ZIP_UNIX, newMod << 16); } async fchownPromise(fd: number, uid: number, gid: number): Promise { @@ -1298,10 +1125,7 @@ export class ZipFS extends BasePortableFakeFS { if (entry === undefined) throw new Error(`Unreachable`); - const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); - if (rc === -1) { - throw this.makeLibzipError(this.libzip.getError(this.zip)); - } + this.zipImpl.setMtime(entry, toUnixTimestamp(mtime)); } async mkdirPromise(p: PortablePath, opts?: MkdirOptions) { @@ -1383,9 +1207,7 @@ export class ZipFS extends BasePortableFakeFS { } private hydrateDirectory(resolvedP: PortablePath) { - const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP)); - if (index === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + const index = this.zipImpl.addDirectory(ppath.relative(PortablePath.root, resolvedP)); this.registerListing(resolvedP); this.registerEntry(resolvedP, index); @@ -1421,9 +1243,8 @@ export class ZipFS extends BasePortableFakeFS { const index = this.setFileSource(resolvedP, target); this.registerEntry(resolvedP, index); - const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (constants.S_IFLNK | 0o777) << 16); - if (rc === -1) - throw this.makeLibzipError(this.libzip.getError(this.zip)); + + this.zipImpl.setExternalAttributes(index, ZIP_UNIX, (constants.S_IFLNK | 0o777) << 16); this.symlinkCount += 1; } @@ -1656,9 +1477,12 @@ export class ZipFS extends BasePortableFakeFS { return {on: () => {}, close: () => {}}; const interval = setInterval(() => {}, 24 * 60 * 60 * 1000); - return {on: () => {}, close: () => { - clearInterval(interval); - }}; + return { + on: () => {}, + close: () => { + clearInterval(interval); + }, + }; } watchFile(p: PortablePath, cb: WatchFileCallback): StatWatcher; diff --git a/packages/yarnpkg-libzip/sources/ZipOpenFS.ts b/packages/yarnpkg-libzip/sources/ZipOpenFS.ts index 1f3ebe061d53..66189578526d 100644 --- a/packages/yarnpkg-libzip/sources/ZipOpenFS.ts +++ b/packages/yarnpkg-libzip/sources/ZipOpenFS.ts @@ -4,6 +4,8 @@ import {PortablePath, ppath} from '@yarnpkg/fslib'; import {Libzip} from '@yarnpkg/libzip'; import {ZipFS} from '@yarnpkg/libzip'; +import {ZipImplementationClass} from './ZipFS'; + /** * Extracts the archive part (ending in the first instance of `extension`) from a path. * @@ -41,7 +43,7 @@ export type ZipOpenFSOptions = Omit, > & { libzip?: Libzip | (() => Libzip); readOnlyArchives?: boolean; - + customZipImplementation?: ZipImplementationClass; /** * Which file extensions will be interpreted as zip files. Useful for supporting other formats * packaged as zips, such as .docx. @@ -84,6 +86,7 @@ export class ZipOpenFS extends MountFS { baseFs, readOnly: readOnlyArchives, stats: baseFs.statSync(p), + customZipImplementation: opts.customZipImplementation, }); }; @@ -92,6 +95,7 @@ export class ZipOpenFS extends MountFS { baseFs, readOnly: readOnlyArchives, stats: await baseFs.statPromise(p), + customZipImplementation: opts.customZipImplementation, }; return () => { diff --git a/packages/yarnpkg-libzip/sources/jsZipImpl.ts b/packages/yarnpkg-libzip/sources/jsZipImpl.ts new file mode 100644 index 000000000000..38071d9123a2 --- /dev/null +++ b/packages/yarnpkg-libzip/sources/jsZipImpl.ts @@ -0,0 +1,265 @@ +import {FakeFS, PortablePath, constants} from '@yarnpkg/fslib'; + +import {Stat, ZIP_UNIX, type CompressionData, type ZipImpl, type ZipImplInput} from './ZipFS'; + +const SIGNATURE = { + CENTRAL_DIRECTORY: 0x02014b50, + END_OF_CENTRAL_DIRECTORY: 0x06054b50, +}; + +const noCommentCDSize = 22; + +export interface Entry { + name: string; + compressionMethod: number; + size: number; + os: number; + isSymbolicLink: boolean; + crc: number; + compressedSize: number; + externalAttributes: number; + mtime: number; + localHeaderOffset: number; +} + +export class JsZipImpl implements ZipImpl { + fd: number; + baseFs: FakeFS; + entries: Array; + + constructor(opts: ZipImplInput) { + if (`buffer` in opts) + throw new Error(`Buffer based zip archives are not supported`); + + if (!opts.readOnly) + throw new Error(`Writable zip archives are not supported`); + + this.baseFs = opts.baseFs; + this.fd = this.baseFs.openSync(opts.path, `r`); + + this.entries = JsZipImpl.readZipSync(this.fd, this.baseFs, opts.size); + } + + static readZipSync(fd: number, baseFs: FakeFS, fileSize: number): Array { + if (fileSize < noCommentCDSize) + throw new Error(`Invalid ZIP file: EOCD not found`); + + let eocdOffset = -1; + + // fast read if no comment + let eocdBuffer = Buffer.alloc(noCommentCDSize); + baseFs.readSync( + fd, + eocdBuffer, + 0, + noCommentCDSize, + fileSize - noCommentCDSize, + ); + + if (eocdBuffer.readUInt32LE(0) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = 0; + } else { + const bufferSize = Math.min(65557, fileSize); + eocdBuffer = Buffer.alloc(bufferSize); + + // Read potential EOCD area + baseFs.readSync( + fd, + eocdBuffer, + 0, + bufferSize, + Math.max(0, fileSize - bufferSize), + ); + + // Find EOCD signature + for (let i = eocdBuffer.length - 4; i >= 0; i--) { + if (eocdBuffer.readUInt32LE(i) === SIGNATURE.END_OF_CENTRAL_DIRECTORY) { + eocdOffset = i; + break; + } + } + + if (eocdOffset === -1) { + throw new Error(`Not a zip archive`); + } + } + + const totalEntries = eocdBuffer.readUInt16LE(eocdOffset + 10); + const centralDirSize = eocdBuffer.readUInt32LE(eocdOffset + 12); + const centralDirOffset = eocdBuffer.readUInt32LE(eocdOffset + 16); + const commentLength = eocdBuffer.readUInt16LE(eocdOffset + 20); + + // Optional check, fixes two tests: libzip/incons-archive-comment-longer.zip and go/comment-truncated.zip + // https://github.com/golang/go/blob/f062d7b10b276c1b698819f492e4b4754e160ee3/src/archive/zip/reader_test.go#L573 + // Important to NOT skip last EOCDR. Both using last EOCDR or throwing error is fine, we throw + if (eocdOffset + commentLength + noCommentCDSize > eocdBuffer.length) + throw new Error(`Zip archive inconsistent`); + + if (totalEntries == 0xffff || centralDirSize == 0xffffffff || centralDirOffset == 0xffffffff) + // strictly speaking, not correct, should find zip64 signatures. But chances are 0 for false positives. + throw new Error(`Zip 64 is not supported`); + + if (centralDirSize > fileSize) + throw new Error(`Zip archive inconsistent`); + + if (totalEntries > centralDirSize / 46) + throw new Error(`Zip archive inconsistent`); + + // Read central directory + const cdBuffer = Buffer.alloc(centralDirSize); + if (baseFs.readSync(fd, cdBuffer, 0, cdBuffer.length, centralDirOffset) !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + + const entries: Array = []; + + let offset = 0; + let index = 0; + let sumCompressedSize = 0; + + while (index < totalEntries) { + if (offset + 46 > cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + + if (cdBuffer.readUInt32LE(offset) !== SIGNATURE.CENTRAL_DIRECTORY) + throw new Error(`Zip archive inconsistent`); + + const versionMadeBy = cdBuffer.readUInt16LE(offset + 4); + const os = versionMadeBy >>> 8; + + const flags = cdBuffer.readUInt16LE(offset + 8); + if ((flags & 0x0001) !== 0) + throw new Error(`Encrypted zip files are not supported`); + + // we don't care about data descriptor because we dont read size and crc from local file header + // const hasDataDescriptor = (flags & 0x8) !== 0; + const compressionMethod = cdBuffer.readUInt16LE(offset + 10); + const crc = cdBuffer.readUInt32LE(offset + 16); + const nameLength = cdBuffer.readUInt16LE(offset + 28); + const extraLength = cdBuffer.readUInt16LE(offset + 30); + const commentLength = cdBuffer.readUInt16LE(offset + 32); + const localHeaderOffset = cdBuffer.readUInt32LE(offset + 42); + + const name = cdBuffer.toString(`utf8`, offset + 46, offset + 46 + nameLength).replaceAll(`\0`, ` `); + if (name.includes(`\0`)) + throw new Error(`Invalid ZIP file`); + + const compressedSize = cdBuffer.readUInt32LE(offset + 20); + const externalAttributes = cdBuffer.readUInt32LE(offset + 38); + + entries.push({ + name, + os, + mtime: constants.SAFE_TIME, //we dont care, + crc, + compressionMethod, + isSymbolicLink: os === ZIP_UNIX && ((externalAttributes >>> 16) & constants.S_IFMT) === constants.S_IFLNK, + size: cdBuffer.readUInt32LE(offset + 24), + compressedSize, + externalAttributes, + localHeaderOffset, + }); + + sumCompressedSize += compressedSize; + + index += 1; + offset += 46 + nameLength + extraLength + commentLength; + } + + // fast check for archive bombs + if (sumCompressedSize > fileSize) + throw new Error(`Zip archive inconsistent`); + + if (offset !== cdBuffer.length) + throw new Error(`Zip archive inconsistent`); + + return entries; + } + + getExternalAttributes(index: number): [opsys: number, attributes: number] { + const entry = this.entries[index]; + return [entry.os, entry.externalAttributes]; + } + + getListings(): Array { + return this.entries.map(e => e.name); + } + + getSymlinkCount(): number { + let count = 0; + + for (const entry of this.entries) + if (entry.isSymbolicLink) + count += 1; + + return count; + } + + stat(index: number): Stat { + const entry = this.entries[index]; + + return { + crc: entry.crc, + mtime: entry.mtime, + size: entry.size, + }; + } + + locate(name: string): number { + // https://github.com/nih-at/libzip/blob/f7f725d432db2dd1b266d336a3dccc693d988447/lib/zip_name_locate.c#L50 + for (let ind = 0; ind < this.entries.length; ind++) + if (this.entries[ind].name === name) + return ind; + + return -1; + } + + getFileSource(index: number): {data: Buffer, compressionMethod: number} { + const entry = this.entries[index]; + const localHeaderBuf = Buffer.alloc(30); + + this.baseFs.readSync( + this.fd, + localHeaderBuf, + 0, + localHeaderBuf.length, + entry.localHeaderOffset, + ); + + const nameLength = localHeaderBuf.readUInt16LE(26); + // const flags = localHeaderBuf.readUInt16LE(6); + const extraLength = localHeaderBuf.readUInt16LE(28); + + const buffer = Buffer.alloc(entry.compressedSize); + if (this.baseFs.readSync(this.fd, buffer, 0, entry.compressedSize, entry.localHeaderOffset + 30 + nameLength + extraLength) !== entry.compressedSize) + throw new Error(`Invalid ZIP file`); + + return {data: buffer, compressionMethod: entry.compressionMethod}; + } + + discard(): void { + } + + addDirectory(path: string): number { + throw new Error(`Not implemented`); + } + + deleteEntry(index: number): void { + throw new Error(`Not implemented`); + } + + setMtime(index: number, mtime: number): void { + throw new Error(`Not implemented`); + } + + getBufferAndClose(): Buffer { + throw new Error(`Not implemented`); + } + + setFileSource(target: PortablePath, compression: CompressionData, buffer: Buffer): number { + throw new Error(`Not implemented`); + } + + setExternalAttributes(index: number, opsys: number, attributes: number): void { + throw new Error(`Not implemented`); + } +} diff --git a/packages/yarnpkg-libzip/sources/libzipImpl.ts b/packages/yarnpkg-libzip/sources/libzipImpl.ts new file mode 100644 index 000000000000..919b968bd573 --- /dev/null +++ b/packages/yarnpkg-libzip/sources/libzipImpl.ts @@ -0,0 +1,323 @@ +import {PortablePath} from '@yarnpkg/fslib'; +import {Libzip} from '@yarnpkg/libzip'; + +import {ZipImplInput, type CompressionData, type Stat, type ZipImpl} from './ZipFS'; +import {getInstance} from './instance'; + + +export class LibzipError extends Error { + code: string; + + constructor(message: string, code: string) { + super(message); + + this.name = `Libzip Error`; + this.code = code; + } +} + +export class LibZipImpl implements ZipImpl { + private readonly libzip: Libzip; + private readonly lzSource: number; + private readonly zip: number; + + /** + * A cache of indices mapped to file sources. + * Populated by `setFileSource` calls. + * Required for supporting read after write. + */ + private readonly fileSources: Map = new Map(); + + private readonly listings: Array; + private readonly symlinkCount: number; + + constructor(opts: ZipImplInput) { + const buffer = `buffer` in opts + ? opts.buffer + : opts.baseFs.readFileSync(opts.path); + + this.libzip = getInstance(); + + const errPtr = this.libzip.malloc(4); + try { + let flags = 0; + if (opts.readOnly) + flags |= this.libzip.ZIP_RDONLY; + + const lzSource = this.allocateUnattachedSource(buffer); + try { + this.zip = this.libzip.openFromSource(lzSource, flags, errPtr); + this.lzSource = lzSource; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + + if (this.zip === 0) { + const error = this.libzip.struct.errorS(); + this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`)); + + throw this.makeLibzipError(error); + } + } finally { + this.libzip.free(errPtr); + } + + const entryCount = this.libzip.getNumEntries(this.zip, 0); + + const listings = new Array(entryCount); + for (let t = 0; t < entryCount; ++t) + listings[t] = this.libzip.getName(this.zip, t, 0); + + this.listings = listings; + + this.symlinkCount = this.libzip.ext.countSymlinks(this.zip); + if (this.symlinkCount === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + + getSymlinkCount() { + return this.symlinkCount; + } + + getListings(): Array { + return this.listings; + } + + stat(entry: number): Stat { + const stat = this.libzip.struct.statS(); + + const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + const size = (this.libzip.struct.statSize(stat) >>> 0); + const mtime = (this.libzip.struct.statMtime(stat) >>> 0); + + const crc = this.libzip.struct.statCrc(stat) >>> 0; + + return {size, mtime, crc}; + } + + makeLibzipError(error: number) { + const errorCode = this.libzip.struct.errorCodeZip(error); + const strerror = this.libzip.error.strerror(error); + + const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]); + + // This error should never come up because of the file source cache + if (errorCode === this.libzip.errors.ZIP_ER_CHANGED) + throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`); + + return libzipError; + } + + setFileSource(target: PortablePath, compression: CompressionData, buffer: Buffer) { + const lzSource = this.allocateSource(buffer); + + try { + const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE); + if (newIndex === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + if (compression !== null) { + const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, compression[0], compression[1]); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + this.fileSources.set(newIndex, buffer); + return newIndex; + } catch (error) { + this.libzip.source.free(lzSource); + throw error; + } + } + + setMtime(entry: number, mtime: number): void { + const rc = this.libzip.file.setMtime(this.zip, entry, 0, mtime, 0); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + + getExternalAttributes(index: number): [number, number] { + const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S); + if (attrs === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0; + const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 0; + return [opsys, attributes]; + } + + setExternalAttributes(index: number, opsys: number, attributes: number): void { + const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, opsys, attributes); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + + locate(name: string): number { + return this.libzip.name.locate(this.zip, name, 0); + } + + getFileSource(index: number) { + const cachedFileSource = this.fileSources.get(index); + if (typeof cachedFileSource !== `undefined`) + return {data: cachedFileSource, compressionMethod: 0}; + + const stat = this.libzip.struct.statS(); + + const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + const size = this.libzip.struct.statCompSize(stat); + const compressionMethod = this.libzip.struct.statCompMethod(stat); + const buffer = this.libzip.malloc(size); + + try { + const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED); + if (file === 0) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + try { + const rc = this.libzip.fread(file, buffer, size, 0); + + if (rc === -1) + throw this.makeLibzipError(this.libzip.file.getError(file)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + + const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + + return {data, compressionMethod}; + } finally { + this.libzip.fclose(file); + } + } finally { + this.libzip.free(buffer); + } + } + + deleteEntry(index: number) { + this.fileSources.delete(index); + const rc = this.libzip.delete(this.zip, index); + if (rc === -1) { + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + } + + addDirectory(path: string): number { + const index = this.libzip.dir.add(this.zip, path); + if (index === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + return index; + } + + getBufferAndClose() { + try { + // Prevent close from cleaning up the source + this.libzip.source.keep(this.lzSource); + + // Close the zip archive + if (this.libzip.close(this.zip) === -1) + throw this.makeLibzipError(this.libzip.getError(this.zip)); + + // Open the source for reading + if (this.libzip.source.open(this.lzSource) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + + // Move to the end of source + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + + // Get the size of source + const size = this.libzip.source.tell(this.lzSource); + if (size === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + + // Move to the start of source + if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + + const buffer = this.libzip.malloc(size); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + + try { + const rc = this.libzip.source.read(this.lzSource, buffer, size); + + if (rc === -1) + throw this.makeLibzipError(this.libzip.source.error(this.lzSource)); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + + let result = Buffer.from(this.libzip.HEAPU8.subarray(buffer, buffer + size)); + + if (process.env.YARN_IS_TEST_ENV && process.env.YARN_ZIP_DATA_EPILOGUE) + result = Buffer.concat([result, Buffer.from(process.env.YARN_ZIP_DATA_EPILOGUE)]); + + return result; + } finally { + this.libzip.free(buffer); + } + } finally { + this.libzip.source.close(this.lzSource); + this.libzip.source.free(this.lzSource); + } + } + + private allocateBuffer(content: string | Buffer | ArrayBuffer | DataView) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content as any); + + const buffer = this.libzip.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + + // Copy the file into the Emscripten heap + const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content as any); + + return {buffer, byteLength: content.byteLength}; + } + + private allocateUnattachedSource(content: string | Buffer | ArrayBuffer | DataView) { + const error = this.libzip.struct.errorS(); + + const {buffer, byteLength} = this.allocateBuffer(content); + const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error); + + if (source === 0) { + this.libzip.free(error); + throw this.makeLibzipError(error); + } + + return source; + } + + private allocateSource(content: string | Buffer | ArrayBuffer | DataView) { + const {buffer, byteLength} = this.allocateBuffer(content); + const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1); + + if (source === 0) { + this.libzip.free(buffer); + throw this.makeLibzipError(this.libzip.getError(this.zip)); + } + + return source; + } + + public discard(): void { + this.libzip.discard(this.zip); + } +} diff --git a/packages/yarnpkg-libzip/sources/sync.ts b/packages/yarnpkg-libzip/sources/sync.ts index f554bff82144..5b9b495e6259 100644 --- a/packages/yarnpkg-libzip/sources/sync.ts +++ b/packages/yarnpkg-libzip/sources/sync.ts @@ -18,3 +18,5 @@ export async function getLibzipPromise() { } export type {Libzip} from './makeInterface'; +export {JsZipImpl} from './jsZipImpl'; +export {LibZipImpl} from './libzipImpl'; diff --git a/packages/yarnpkg-libzip/tests/ZipParsers.test.ts b/packages/yarnpkg-libzip/tests/ZipParsers.test.ts new file mode 100644 index 000000000000..31928d626933 --- /dev/null +++ b/packages/yarnpkg-libzip/tests/ZipParsers.test.ts @@ -0,0 +1,113 @@ +import {NodeFS, PortablePath} from '@yarnpkg/fslib'; +import {ppath} from '@yarnpkg/fslib'; +import {createHash} from 'crypto'; +import fs from 'fs'; +import globby from 'globby'; + +import {ZipImpl, ZipImplementationClass} from '../sources/ZipFS'; +import {JsZipImpl, LibZipImpl} from '../sources/sync'; + +// libzip is cloned from https://github.com/nih-at/libzip/tree/3beae9f0ccb6b991d875482ee67b21b418e7d0d5/regress +// go is cloned from https://github.com/golang/go/tree/f062d7b10b276c1b698819f492e4b4754e160ee3/src/archive/zip/testdata + +const acceptedDiscrepancies: Record = { + 'libzip/zip64-3mf.zip': `no zip64 support`, + 'go/zip64-2.zip': `no zip64 support`, + 'go/zip64.zip': `no zip64 support`, + 'libzip/zip64-in-archive-comment.zip': `no zip64 support`, + 'libzip/incons-eocd64.zip': `no zip64 support`, + + 'libzip/zip-in-archive-comment.zip': ` + archive has multiple eocds, first (last in disk) is referencing an offset to central directory, + but central directory signature is not there. + libzip seems to try to find next eocd, but we don't care about broken archives. + As soon as it throws an error, we are safe. + https://github.com/nih-at/libzip/commit/ab8715437128c8405b5b8861d2fadf69b94a025b`, + + 'libzip/incons-local-filename-long.zip': `different error message`, + 'libzip/junk-at-start.zip': `different error message`, + 'libzip/incons-central-magic-bad2.zip': `different error message`, + 'libzip/incons-central-magic-bad.zip': `different error message`, + 'go/test-prefix.zip': `different error message`, + 'libzip/bogus.zip': `different error message`, + 'go/test-badbase.zip': `different error message`, + + 'libzip/multidisk.zip': ` + we are ignoring disk info for performance. + Consistent with macos. Go implementation does read disk info but does not use it.`, + + 'libzip/extra_field_align_1-ef_ff.zip': ` + go reads it for zip64 and modified date. We don't read extra for performance. + https://github.com/golang/go/blob/f062d7b10b276c1b698819f492e4b4754e160ee3/src/archive/zip/reader.go#L416`, + 'libzip/extra_field_align_1-ff.zip': `same`, + 'libzip/extra_field_align_2-ef_ff.zip': `same`, + 'libzip/extra_field_align_2-ff.zip': `same`, + 'libzip/extra_field_align_3-ef_ff.zip': `same`, + 'libzip/extra_field_align_3-ff.zip': `same`, + 'libzip/incons-ef-central-size-wrong.zip': `same`, + + + 'libzip/test-cp437-comment-utf-8.zip': `we dont support not utf8 encoding`, + 'libzip/test-cp437.zip': `we dont support not utf8 encoding`, + 'libzip/testfile-cp437.zip': `we dont support not utf8 encoding`, + + 'libzip/incons-file-count-overflow.zip': ` + Idk why libzip throws. Mac os opens it. TODO + `, + 'libzip/broken.zip': ` + We throw when encryption flags are set.`, +}; + +function makeSnapshot(ImplCls: ZipImplementationClass, absPath: PortablePath) { + let zip: ZipImpl | null = null; + + try { + zip = new ImplCls({path: absPath, baseFs: new NodeFS(), readOnly: true, size: fs.statSync(absPath).size}); + } catch (e) { + return {error: e.message}; + // throw e + } + + const entries = zip.getListings(); + return { + entries: entries.map((entry, ind) => { + try { + const {compressionMethod, data} = zip.getFileSource(ind); + const dataHash = createHash(`sha256`).update(data).digest(`hex`); + // const dataHash = data.toString() + const attrs = zip.getExternalAttributes(ind); + const res: any = {name: entry, ...zip.stat(ind), compressionMethod, dataHash, os: attrs[0], externalAttributes: attrs[1]}; + delete res.mtime; + return res; + } catch (e) { + return {name: entry, errorEntry: e.message}; + } + }), + linksCount: zip.getSymlinkCount(), + + }; +} +describe(`ZipParsers`, () => { + const root = ppath.join(__dirname as PortablePath, `testdata`); + const archives = globby.sync(`**/*.zip`, {cwd: root}); + it.each(archives.map(a => [a]))(`can read from a zip file: %s`, async archive => { + const absPath = ppath.join(root, archive as PortablePath); + const update = expect.getState().snapshotState._updateSnapshot; + if (!update) + throw new Error(`api changed??`); + + if (acceptedDiscrepancies[archive]) { + const snapshot = makeSnapshot(LibZipImpl, absPath); + const snapshot2 = makeSnapshot(JsZipImpl, absPath); + expect(snapshot).toMatchSnapshot(`libzip`); + expect(snapshot2).toMatchSnapshot(`jszip`); + expect(snapshot).not.toEqual(snapshot2); + return; + } + + const ImplCls: ZipImplementationClass = update === `all` ? LibZipImpl : JsZipImpl; + + + expect(makeSnapshot(ImplCls, absPath)).toMatchSnapshot(`libzip`); + }); +}); diff --git a/packages/yarnpkg-libzip/tests/__snapshots__/ZipParsers.test.ts.snap b/packages/yarnpkg-libzip/tests/__snapshots__/ZipParsers.test.ts.snap new file mode 100644 index 000000000000..954eef78ce14 --- /dev/null +++ b/packages/yarnpkg-libzip/tests/__snapshots__/ZipParsers.test.ts.snap @@ -0,0 +1,4196 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ZipParsers can read from a zip file: go/comment-truncated.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: go/crc32-not-streamed.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2117232040, + "dataHash": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c", + "externalAttributes": 2175008768, + "name": "foo.txt", + "os": 3, + "size": 4, + }, + { + "compressionMethod": 0, + "crc": 77771753, + "dataHash": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730", + "externalAttributes": 2175008768, + "name": "bar.txt", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/dd.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2732840659, + "dataHash": "28265e328d3015e23a5612e1770551358d66f4768f5e5b6fc9bdae111a9f4b4a", + "externalAttributes": 0, + "name": "filename", + "os": 0, + "size": 25, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/dupdir.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "a/", + "os": 0, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "a/b", + "os": 0, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "a/b/", + "os": 0, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "a/b/c", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/go-with-datadesc-sig.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2117232040, + "dataHash": "b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c", + "externalAttributes": 0, + "name": "foo.txt", + "os": 0, + "size": 4, + }, + { + "compressionMethod": 0, + "crc": 77771753, + "dataHash": "7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730", + "externalAttributes": 0, + "name": "bar.txt", + "os": 0, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/readme.not.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: go/readme.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2181565152, + "dataHash": "3301280c2047eb897340af3b8dbc75f105011a1d56f8b280ef38b6d3c3fcb9ae", + "externalAttributes": 2175008768, + "name": "README", + "os": 3, + "size": 1096, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/subdir.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1105723408, + "name": "a/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1105723408, + "name": "a/b/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2174746624, + "name": "a/b/c", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/symlink.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2392783569, + "dataHash": "b4d371f570d910a6d7956a5f8ddff022a601c2dd958fa285de41b8b8c7048219", + "externalAttributes": 2717843456, + "name": "symlink", + "os": 3, + "size": 9, + }, + ], + "linksCount": 1, +} +`; + +exports[`ZipParsers can read from a zip file: go/test.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3287144384, + "dataHash": "75b730588fcdcc6b8916f1eca200c97ae16325ba0e58674a77d8cc8c415fdccc", + "externalAttributes": 2175008768, + "name": "test.txt", + "os": 3, + "size": 26, + }, + { + "compressionMethod": 0, + "crc": 1423258110, + "dataHash": "f29bb9177d08fb50027e74a37eb00a69906a5994dc55a041670703efe4ecfdc9", + "externalAttributes": 2175008768, + "name": "gophercolor16x16.png", + "os": 3, + "size": 785, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/test-badbase.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: go/test-badbase.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: go/test-baddirsz.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: go/test-prefix.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: go/test-prefix.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: go/test-trailing-junk.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3287144384, + "dataHash": "75b730588fcdcc6b8916f1eca200c97ae16325ba0e58674a77d8cc8c415fdccc", + "externalAttributes": 2175008768, + "name": "test.txt", + "os": 3, + "size": 26, + }, + { + "compressionMethod": 0, + "crc": 1423258110, + "dataHash": "f29bb9177d08fb50027e74a37eb00a69906a5994dc55a041670703efe4ecfdc9", + "externalAttributes": 2175008768, + "name": "gophercolor16x16.png", + "os": 3, + "size": 785, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-7zip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 128, + "name": "test.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-22738.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "file", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-go.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "test.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-infozip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2175008768, + "name": "test.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-osx.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2175025152, + "name": "test.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-win7.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "test.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-winrar.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 128, + "name": "test.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/time-winzip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "test.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/unix.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2098461837, + "dataHash": "6536d4feae10cf69a35efe7b0e4abedbc7c8c7bac12d89232b7dfcf5f387927c", + "externalAttributes": 2176188416, + "name": "hello", + "os": 3, + "size": 8, + }, + { + "compressionMethod": 0, + "crc": 2055117726, + "dataHash": "39dd73e4dae46b506e7f9b41066f7f21e5d61dadd4d2b5806d31e364886c2d08", + "externalAttributes": 2176188416, + "name": "dir/bar", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1107230736, + "name": "dir/empty/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 3127775578, + "dataHash": "779ea758cdca523be3302725bd89ced1d0c3499db16fa80580bcf731a7de2099", + "externalAttributes": 2166620161, + "name": "readonly", + "os": 3, + "size": 12, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/utf8-7zip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 128, + "name": "世界", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/utf8-infozip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2175008768, + "name": "世界", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/utf8-osx.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2175025152, + "name": "世界", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/utf8-winrar.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 128, + "name": "世界", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/utf8-winzip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 0, + "name": "世界", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/winxp.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2098461837, + "dataHash": "6536d4feae10cf69a35efe7b0e4abedbc7c8c7bac12d89232b7dfcf5f387927c", + "externalAttributes": 32, + "name": "hello", + "os": 11, + "size": 8, + }, + { + "compressionMethod": 0, + "crc": 2055117726, + "dataHash": "39dd73e4dae46b506e7f9b41066f7f21e5d61dadd4d2b5806d31e364886c2d08", + "externalAttributes": 32, + "name": "dir/bar", + "os": 11, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 16, + "name": "dir/empty/", + "os": 11, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 3127775578, + "dataHash": "779ea758cdca523be3302725bd89ced1d0c3499db16fa80580bcf731a7de2099", + "externalAttributes": 33, + "name": "readonly", + "os": 11, + "size": 12, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/zip64.zip: jszip 1`] = ` +{ + "error": "Zip 64 is not supported", +} +`; + +exports[`ZipParsers can read from a zip file: go/zip64.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 1778378622, + "dataHash": "281e862ebb425c62ebf9047e7f9f7909e096f48daccaa0d29523eb5c4f2dae56", + "externalAttributes": 2175008768, + "name": "README", + "os": 3, + "size": 36, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: go/zip64-2.zip: jszip 1`] = ` +{ + "error": "Zip 64 is not supported", +} +`; + +exports[`ZipParsers can read from a zip file: go/zip64-2.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 1778378622, + "dataHash": "281e862ebb425c62ebf9047e7f9f7909e096f48daccaa0d29523eb5c4f2dae56", + "externalAttributes": 2175008768, + "name": "README", + "os": 3, + "size": 36, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/bigzero-zip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2920644948, + "dataHash": "d2e15541835e62beaa245043dcc416304c7b50907a90e75979ffa2cde7f4f0c0", + "externalAttributes": 2176057344, + "name": "bigzero.zip", + "os": 3, + "size": 4168377, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/bogus.zip: jszip 1`] = ` +{ + "error": "Invalid ZIP file: EOCD not found", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/bogus.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/broken.zip: jszip 1`] = ` +{ + "error": "Encrypted zip files are not supported", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/broken.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3071961420, + "dataHash": "f51842a329e9a5d346096d124920f34806ddf1f98bd7bc01cf39e9143f7970e6", + "externalAttributes": 2175008768, + "name": "storedok", + "os": 3, + "size": 10240, + }, + { + "compressionMethod": 0, + "crc": 3071961421, + "dataHash": "f51842a329e9a5d346096d124920f34806ddf1f98bd7bc01cf39e9143f7970e6", + "externalAttributes": 2175008768, + "name": "storedcrcerror", + "os": 3, + "size": 10240, + }, + { + "compressionMethod": 8, + "crc": 4256668105, + "dataHash": "f9047cdb95cbc0f2a2c10896fb7d33648b2369140e402685a37174db0f7d185c", + "externalAttributes": 2175008768, + "name": "deflateok", + "os": 3, + "size": 43133, + }, + { + "compressionMethod": 8, + "crc": 4256668106, + "dataHash": "f9047cdb95cbc0f2a2c10896fb7d33648b2369140e402685a37174db0f7d185c", + "externalAttributes": 2175008768, + "name": "deflatecrcerror", + "os": 3, + "size": 43133, + }, + { + "compressionMethod": 8, + "crc": 4256668105, + "dataHash": "e8c4be91376b93df6c5b8af266e4e9b7f4e5d11bb4edd7ab3568848e44a90c01", + "externalAttributes": 2175008768, + "name": "deflatezliberror", + "os": 3, + "size": 43133, + }, + { + "errorEntry": "No password provided", + "name": "cryptok", + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/changing-size.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 176221383, + "dataHash": "c962fa1be311981f0f965857e89b000707f9cea07a069d073461308f3019200f", + "externalAttributes": 2176057344, + "name": "short", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 12600393, + "dataHash": "ff72d6bb7e367b34a42308733dfa1549ecc346d5b7fff18969ef639d349c10e3", + "externalAttributes": 2176057344, + "name": "muchlonger", + "os": 3, + "size": 11, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/changing-size-muchl.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 176221383, + "dataHash": "c962fa1be311981f0f965857e89b000707f9cea07a069d073461308f3019200f", + "externalAttributes": 2176057344, + "name": "short", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 12600393, + "dataHash": "ff72d6bb7e367b34a42308733dfa1549ecc346d5b7fff18969ef639d349c10e3", + "externalAttributes": 2176057344, + "name": "muchlonger", + "os": 3, + "size": 11, + }, + { + "compressionMethod": 0, + "crc": 1490071018, + "dataHash": "fd527ba7a804d2643f576b9b97cfba8a98f091fd87317cf41f44113511d82539", + "externalAttributes": 2175008768, + "name": "new", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/changing-size-muchlo.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 176221383, + "dataHash": "c962fa1be311981f0f965857e89b000707f9cea07a069d073461308f3019200f", + "externalAttributes": 2176057344, + "name": "short", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 12600393, + "dataHash": "ff72d6bb7e367b34a42308733dfa1549ecc346d5b7fff18969ef639d349c10e3", + "externalAttributes": 2176057344, + "name": "muchlonger", + "os": 3, + "size": 11, + }, + { + "compressionMethod": 0, + "crc": 1334331535, + "dataHash": "78830e62fae99f2dcfde97a552efc2b1bb0ae24ba339d1cd5ef86986a38102a1", + "externalAttributes": 2176057344, + "name": "new", + "os": 3, + "size": 6, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/changing-size-muchlonger.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 176221383, + "dataHash": "c962fa1be311981f0f965857e89b000707f9cea07a069d073461308f3019200f", + "externalAttributes": 2176057344, + "name": "short", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 12600393, + "dataHash": "ff72d6bb7e367b34a42308733dfa1549ecc346d5b7fff18969ef639d349c10e3", + "externalAttributes": 2176057344, + "name": "muchlonger", + "os": 3, + "size": 11, + }, + { + "compressionMethod": 0, + "crc": 12600393, + "dataHash": "ff72d6bb7e367b34a42308733dfa1549ecc346d5b7fff18969ef639d349c10e3", + "externalAttributes": 2175008768, + "name": "new", + "os": 3, + "size": 11, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/cm-default.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2654656602, + "dataHash": "dabd119b738f71097c879e5d59e4b0b0dfda4a8ef2c9dc1592dca8b5dfba3760", + "externalAttributes": 2176188416, + "name": "compressible", + "os": 3, + "size": 14, + }, + { + "compressionMethod": 0, + "crc": 4276806774, + "dataHash": "0584cc6c01d97cd9b60649827d9df34668af729ebb6152ee0c7dedcf2254c6d1", + "externalAttributes": 2176188416, + "name": "uncompressible", + "os": 3, + "size": 14, + }, + { + "compressionMethod": 8, + "crc": 2201893146, + "dataHash": "56ae91a19335d5105838bcc4e69ea538d709321b880a6db4071717dff1c5c566", + "externalAttributes": 2176188416, + "name": "large-compressible", + "os": 3, + "size": 8200, + }, + { + "compressionMethod": 8, + "crc": 2246426984, + "dataHash": "ead9a324b41c0f9f6ae3cfae695265c6a5716eefe8b48b47a57a9061dab15623", + "externalAttributes": 2175008768, + "name": "large-uncompressible", + "os": 3, + "size": 8200, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/encrypt-none.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 957741520, + "dataHash": "dacf36547c7774a0a170806363b5d412991fbc0d6260b2c00b1d3a80a816c23f", + "externalAttributes": 2176057344, + "name": "plain", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 4220280405, + "dataHash": "9eeeedf9bab84e8ff6d17d10734c4aea3529fb49971eeac8e28142537f713bdb", + "externalAttributes": 2176188416, + "name": "encrypted", + "os": 3, + "size": 10, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_1-0.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2615402659, + "dataHash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", + "externalAttributes": 2176057344, + "name": "123", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_1-ef_00.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2212294583, + "dataHash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_1-ef_ff.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2212294583, + "dataHash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_1-ef_ff.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_1-ff.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2615402659, + "dataHash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", + "externalAttributes": 2176057344, + "name": "123", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_1-ff.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_2-0.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2615402659, + "dataHash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", + "externalAttributes": 2176057344, + "name": "12", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_2-ef_00.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2212294583, + "dataHash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_2-ef_ff.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2212294583, + "dataHash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_2-ef_ff.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_2-ff.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2615402659, + "dataHash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", + "externalAttributes": 2176057344, + "name": "12", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_2-ff.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_3-0.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2615402659, + "dataHash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_3-ef_00.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2212294583, + "dataHash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_3-ef_ff.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2212294583, + "dataHash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_3-ef_ff.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_3-ff.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2615402659, + "dataHash": "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_3-ff.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/extra_field_align_4-ff.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3421846044, + "dataHash": "5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5", + "externalAttributes": 2176057344, + "name": "1", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/filename_duplicate.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2086221595, + "dataHash": "634b027b1b69e1242d40d53e312b3b4ac7710f55be81f289b549446ef6778bee", + "externalAttributes": 2176057344, + "name": "test1", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 1467245784, + "dataHash": "7d6fd7774f0d87624da6dcf16d0d3d104c3191e771fbe2f39c86aed4b2bf1a0f", + "externalAttributes": 2176057344, + "name": "test1", + "os": 3, + "size": 6, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/filename_duplicate_empty.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2086221595, + "dataHash": "634b027b1b69e1242d40d53e312b3b4ac7710f55be81f289b549446ef6778bee", + "externalAttributes": 2176057344, + "name": "", + "os": 3, + "size": 6, + }, + { + "compressionMethod": 0, + "crc": 1467245784, + "dataHash": "7d6fd7774f0d87624da6dcf16d0d3d104c3191e771fbe2f39c86aed4b2bf1a0f", + "externalAttributes": 2176057344, + "name": "", + "os": 3, + "size": 6, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/filename_empty.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/fileorder.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2665963749, + "dataHash": "c147efcfc2d7ea666a9e4f5187b115c90903f0fc896a56df9a6ef5d8f3fc9f31", + "externalAttributes": 2176057344, + "name": "file1", + "os": 3, + "size": 5, + }, + { + "compressionMethod": 0, + "crc": 133050719, + "dataHash": "3377870dfeaaa7adf79a374d2702a3fdb13e5e5ea0dd8aa95a802ad39044a92f", + "externalAttributes": 2176057344, + "name": "file2", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/firstsecond.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 1476497840, + "dataHash": "eb5095db9eb6bd6a49b0bbf28759f498e4332aee13a71a31f0184c4b12a01651", + "externalAttributes": 2176057344, + "name": "firstsecond", + "os": 3, + "size": 19, + }, + { + "compressionMethod": 0, + "crc": 1476497840, + "dataHash": "de63444425a2ef5c20e7fe2dc9ebb4ab5d9199257b585b43593ffaabfafdcb26", + "externalAttributes": 2176057344, + "name": "firstsecondstored", + "os": 3, + "size": 19, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/firstsecond-split-deflated.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2492203176, + "dataHash": "ebc47f12adf5b0de726cb4134deb864f5de51697da620df31bef392826878d9e", + "externalAttributes": 0, + "name": "first", + "os": 0, + "size": 9, + }, + { + "compressionMethod": 8, + "crc": 4254931247, + "dataHash": "a5cbda6468f424e7b1cddf25bd9439f53d47ee8d6f1d880d319b679954d3649a", + "externalAttributes": 0, + "name": "second", + "os": 0, + "size": 10, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/firstsecond-split-stored.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2492203176, + "dataHash": "12efb134828e3763908f639e6fb7c51de416cc16368f9aef2fa08253ac0d15a5", + "externalAttributes": 2176057344, + "name": "first", + "os": 3, + "size": 9, + }, + { + "compressionMethod": 0, + "crc": 4254931247, + "dataHash": "08190eb81ffc6dea922649a96b3e3e11c2d1dfb254510196bc42b0d03536a3c1", + "externalAttributes": 2176057344, + "name": "second", + "os": 3, + "size": 10, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/foo-stored.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2356372769, + "dataHash": "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", + "externalAttributes": 0, + "name": "foo", + "os": 0, + "size": 3, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/gap.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2530230327, + "dataHash": "266a21c9d275ade8343bb2449dd9bb993c9da65980da4ea62fde11184cde0564", + "externalAttributes": 2176188416, + "name": "gap", + "os": 3, + "size": 17, + }, + { + "compressionMethod": 0, + "crc": 397779414, + "dataHash": "cd2127d868215504a41b74da194b882d27f09a65a73769781e406a5925b4c968", + "externalAttributes": 2176188416, + "name": "second", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 8, + "crc": 709795568, + "dataHash": "0b327ae5395f78294d258362066cf312ae21ca120e39a51772f8eb52c7ce866d", + "externalAttributes": 2176188416, + "name": "third", + "os": 3, + "size": 23, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/gap-add.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2530230327, + "dataHash": "266a21c9d275ade8343bb2449dd9bb993c9da65980da4ea62fde11184cde0564", + "externalAttributes": 2176188416, + "name": "gap", + "os": 3, + "size": 17, + }, + { + "compressionMethod": 0, + "crc": 397779414, + "dataHash": "cd2127d868215504a41b74da194b882d27f09a65a73769781e406a5925b4c968", + "externalAttributes": 2176188416, + "name": "second", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 8, + "crc": 709795568, + "dataHash": "0b327ae5395f78294d258362066cf312ae21ca120e39a51772f8eb52c7ce866d", + "externalAttributes": 2176188416, + "name": "third", + "os": 3, + "size": 23, + }, + { + "compressionMethod": 0, + "crc": 3289968996, + "dataHash": "b012e083a558596a0d0fea7cc7ab1ce65c6dde8db7d756589c7b07d3e1b32a2b", + "externalAttributes": 2176188416, + "name": "new", + "os": 3, + "size": 11, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/gap-delete.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2530230327, + "dataHash": "266a21c9d275ade8343bb2449dd9bb993c9da65980da4ea62fde11184cde0564", + "externalAttributes": 2176188416, + "name": "gap", + "os": 3, + "size": 17, + }, + { + "compressionMethod": 0, + "crc": 397779414, + "dataHash": "cd2127d868215504a41b74da194b882d27f09a65a73769781e406a5925b4c968", + "externalAttributes": 2176188416, + "name": "second", + "os": 3, + "size": 24, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/gap-replace.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2530230327, + "dataHash": "266a21c9d275ade8343bb2449dd9bb993c9da65980da4ea62fde11184cde0564", + "externalAttributes": 2176188416, + "name": "gap", + "os": 3, + "size": 17, + }, + { + "compressionMethod": 0, + "crc": 397779414, + "dataHash": "cd2127d868215504a41b74da194b882d27f09a65a73769781e406a5925b4c968", + "externalAttributes": 2176188416, + "name": "second", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 2805317512, + "dataHash": "80faf886b34a35e005ed0c685b3feda041ea4f9cbeed22d1159e175e735f4019", + "externalAttributes": 2176188416, + "name": "third", + "os": 3, + "size": 15, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-archive-comment-longer.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-archive-comment-shorter.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-cdoffset.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-cdsize-large.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-cdsize-small.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-compression-method.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-compsize-larger.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "dd1b77c659639846e9666171bf8d98c7fd8180c389a0457a2c179447772b7ee7", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-compsize-larger-toolarge.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "a0ff29efb4d64b4092d567ad7b85a2513a9ad5370bac5e80217d07b973d846c2", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-compsize-smaller.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3213131846, + "dataHash": "5d4505b0a94a8bba1ebc37f0bdef55dec72fde9fe93d3fab7aef52359d906dd0", + "externalAttributes": 2176057344, + "name": "aaaaaaaaa", + "os": 3, + "size": 8, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-crc.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 4172791363, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-date.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-file-comment-longer.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-file-comment-shorter.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-file-comment-utf8-ascii.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-magic-bad.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-magic-bad.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-magic-bad2.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-magic-bad2.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-central-size-larger.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 32, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-data.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-central-size-wrong.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3632233996, + "dataHash": "e36ebc930c9ec4573353af7fdbf6d1e9930247c648f23395ae4395bc360dbb7d", + "externalAttributes": 0, + "name": "testfile.txt", + "os": 0, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-central-size-wrong.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-dupe-utf8comment.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-dupe-utf8name.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-dupe-zip64-v1.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3723141383, + "dataHash": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-dupe-zip64-v2.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3723141383, + "dataHash": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-id.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-id-size.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-size.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-ef-local-utf8name-ascii.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-eocd-magic-bad.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-eocd64.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-eocd64.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3723141383, + "dataHash": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-file-count-high.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-file-count-low.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-file-count-overflow.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3723141383, + "dataHash": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-file-count-overflow.zip: libzip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-gap-before-cd.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2101323514, + "dataHash": "ce0f6c28b5869ff166714da5fe08554c70c731a335ff9702e38b00f81ad348c6", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 3, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-gap-before-eocd.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-gap-before-local.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2101323514, + "dataHash": "ce0f6c28b5869ff166714da5fe08554c70c731a335ff9702e38b00f81ad348c6", + "externalAttributes": 2176188416, + "name": "test1", + "os": 3, + "size": 3, + }, + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test2", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-compression-method.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-compsize-larger.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-compsize-smaller.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3213131846, + "dataHash": "03d160becd57986f32ab2c934e63d452afe2e8d0550385fcbbf2268740300128", + "externalAttributes": 2176057344, + "name": "aaaaaaaaa", + "os": 3, + "size": 8, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-crc.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-filename.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-filename-long.zip: jszip 1`] = ` +{ + "entries": [ + { + "errorEntry": "Invalid ZIP file", + "name": "a", + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-filename-long.zip: libzip 1`] = ` +{ + "entries": [ + { + "errorEntry": "Invalid argument", + "name": "a", + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-filename-missing.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-filename-nil-byte.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "te t", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-filename-short.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-magic-bad.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-local-size-larger.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "a", + "os": 3, + "size": 1, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-stored-size.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "test", + "os": 3, + "size": 3, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-streamed.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3723141383, + "dataHash": "15a0d99bbf3768a7f268dd073a750ffbbe5fbd802ed8eb5e75b50f53296c04e0", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-streamed-2.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3723141383, + "dataHash": "15a0d99bbf3768a7f268dd073a750ffbbe5fbd802ed8eb5e75b50f53296c04e0", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/incons-trailing-garbage.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 1001993670, + "dataHash": "cf81847c36b3f55c72c38310f6cddac89eea7594f4910e516ed904dda117712f", + "externalAttributes": 2176057344, + "name": "test", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/junk-at-end.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 1001993670, + "dataHash": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", + "externalAttributes": 2176057344, + "name": "test", + "os": 3, + "size": 5, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1106051088, + "name": "testdir/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 1001993670, + "dataHash": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", + "externalAttributes": 2176057344, + "name": "testdir/test2", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/junk-at-start.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/junk-at-start.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/lzma-no-eos.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 14, + "crc": 519593633, + "dataHash": "8b7fa2b3177c1d8daeafee49583ea36e3f65fd2caf3a7fae3cb81ca2fb589f26", + "externalAttributes": 32, + "name": "testfile-with-eos.data", + "os": 0, + "size": 206, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/manyfiles-zip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2587423143, + "dataHash": "47861cb79ad6bfea31b667da7b1e67e541a54bb6a02473f5bb6716709ab397c4", + "externalAttributes": 2176057344, + "name": "manyfiles.zip", + "os": 3, + "size": 6067810, + }, + { + "compressionMethod": 8, + "crc": 2891865028, + "dataHash": "1d8735059786f8fc1a3b2b9a8a2a3e261c08291bbb1b5b8456c00297ab262b33", + "externalAttributes": 2176057344, + "name": "manyfiles-133000.zip", + "os": 3, + "size": 11614812, + }, + { + "compressionMethod": 8, + "crc": 2093353337, + "dataHash": "de1ae454a37c5d8209ee99016266abfe2ff75378fdcd6543f3759cfd37680ec5", + "externalAttributes": 2176057344, + "name": "manyfiles-65536.zip", + "os": 3, + "size": 5744978, + }, + { + "compressionMethod": 8, + "crc": 1387831060, + "dataHash": "ca593094bde1d2b4aa2ed6afcff0680e97305d5ec758f3e869739c2917031da3", + "externalAttributes": 2176057344, + "name": "manyfiles-zip64-modulo.zip", + "os": 3, + "size": 6067886, + }, + { + "compressionMethod": 8, + "crc": 1938219285, + "dataHash": "83da00f4fec10d4a4ac2d0f14df3978e283736db0aaef2faffe0a1128a245068", + "externalAttributes": 2176057344, + "name": "manyfiles-zip64.zip", + "os": 3, + "size": 6067886, + }, + { + "compressionMethod": 8, + "crc": 680712485, + "dataHash": "6a0b3fe7d4048a3e7a674ee5589b36aeffd026f95cf97a28e829d2bed7097079", + "externalAttributes": 2176057344, + "name": "manyfiles-fewer.zip", + "os": 3, + "size": 6067810, + }, + { + "compressionMethod": 8, + "crc": 2445739660, + "dataHash": "e6a93796b65709dbfc04dc69c3b36afe5ab57dafb6180a795c4ab14c8c02bf30", + "externalAttributes": 2176057344, + "name": "manyfiles-more.zip", + "os": 3, + "size": 6067810, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-default.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-dstpoint.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2956279880, + "dataHash": "3c41adb58084174470a635a491a3288fbf86e468907202b68b654683dafd5481", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-dstpoint-deflated.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-post-dstpoint.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2956279880, + "dataHash": "3c41adb58084174470a635a491a3288fbf86e468907202b68b654683dafd5481", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-post-dstpoint-deflated.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-pre-dstpoint.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2956279880, + "dataHash": "3c41adb58084174470a635a491a3288fbf86e468907202b68b654683dafd5481", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/mtime-pre-dstpoint-deflated.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/multidisk.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/multidisk.zip: libzip 1`] = ` +{ + "error": "Multi-disk zip archives not supported", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/rename_ok.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2037438768, + "dataHash": "4b839321eccc2d8b1a54edf5cf71a184c3dd484061c0354a690f28da2f397314", + "externalAttributes": 2175008768, + "name": "file1", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 2428817872, + "dataHash": "8e2b28d3ab37e2b1183043104fb38bea1b9a4ba1e90b97f07364191662ab00c4", + "externalAttributes": 2175008768, + "name": "notfile2", + "os": 3, + "size": 25, + }, + { + "compressionMethod": 0, + "crc": 3964873444, + "dataHash": "89880d874f8e4c11328e51e99877747caa81b3950f94c4a1887a1f6d47a5bc38", + "externalAttributes": 2175008768, + "name": "file3", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 696907016, + "dataHash": "68bb5350afcf72dd61f497b54148b3b53d1547932603d36e7875aaaf94694565", + "externalAttributes": 2175008768, + "name": "file4", + "os": 3, + "size": 25, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/stored-no-eos.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 519593633, + "dataHash": "ca6029e24ec784b73b262f7c5d786d660cbb3c05b26398b5c0264c7c1dd90ecc", + "externalAttributes": 32, + "name": "testfile-with-eos.data", + "os": 0, + "size": 206, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/streamed.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3723141383, + "dataHash": "15a0d99bbf3768a7f268dd073a750ffbbe5fbd802ed8eb5e75b50f53296c04e0", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/streamed-zip64.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 3723141383, + "dataHash": "15a0d99bbf3768a7f268dd073a750ffbbe5fbd802ed8eb5e75b50f53296c04e0", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 1001993670, + "dataHash": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", + "externalAttributes": 2176057344, + "name": "test", + "os": 3, + "size": 5, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1106051088, + "name": "testdir/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 1001993670, + "dataHash": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", + "externalAttributes": 2176057344, + "name": "testdir/test2", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test_open_multiple.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2934909520, + "dataHash": "9c56cc51b374c3ba189210d5b6d4bf57790d351c96c47c02190ecf1e430635ab", + "externalAttributes": 2175041568, + "name": "stuff", + "os": 3, + "size": 8, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-cp437.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": " + +", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": " ", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "!"#$%&'()*+,-./0", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "123456789:;<=>?@", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ABCDEFGHIJKLMNOP", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "QRSTUVWXYZ[\\]^_\`", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "abcdefghijklmnop", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "qrstuvwxyz{|}~�", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-cp437.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "☺☻♥♦♣♠•◘○◙♂♀♪♫☼►", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "◄↕‼¶§▬↨↑↓→←∟↔▲▼ ", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "!"#$%&'()*+,-./0", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "123456789:;<=>?@", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ABCDEFGHIJKLMNOP", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "QRSTUVWXYZ[\\]^_\`", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "abcdefghijklmnop", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "qrstuvwxyz{|}~⌂Ç", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "üéâäàåçêëèïîìÄÅÉ", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "æÆôöòûùÿÖÜ¢£¥₧ƒá", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "íóúñѪº¿⌐¬½¼¡«»░", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "▒▓│┤╡╢╖╕╣║╗╝╜╛┐└", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "┴┬├─┼╞╟╚╔╩╦╠═╬╧╨", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "╤╥╙╘╒╓╫╪┘┌█▄▌▐▀α", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ßΓπΣσµτΦΘΩδ∞φε∩≡", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "±≥≤⌠⌡÷≈°∙·√ⁿ²■  ", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-cp437-comment-utf-8.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": " + +", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": " ", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "!"#$%&'()*+,-./0", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "123456789:;<=>?@", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ABCDEFGHIJKLMNOP", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "QRSTUVWXYZ[\\]^_\`", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "abcdefghijklmnop", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "qrstuvwxyz{|}~�", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "����������������", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-cp437-comment-utf-8.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "☺☻♥♦♣♠•◘○◙♂♀♪♫☼►", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "◄↕‼¶§▬↨↑↓→←∟↔▲▼ ", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "!"#$%&'()*+,-./0", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "123456789:;<=>?@", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ABCDEFGHIJKLMNOP", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "QRSTUVWXYZ[\\]^_\`", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "abcdefghijklmnop", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "qrstuvwxyz{|}~⌂Ç", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "üéâäàåçêëèïîìÄÅÉ", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "æÆôöòûùÿÖÜ¢£¥₧ƒá", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "íóúñѪº¿⌐¬½¼¡«»░", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "▒▓│┤╡╢╖╕╣║╗╝╜╛┐└", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "┴┬├─┼╞╟╚╔╩╦╠═╬╧╨", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "╤╥╙╘╒╓╫╪┘┌█▄▌▐▀α", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ßΓπΣσµτΦΘΩδ∞φε∩≡", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "±≥≤⌠⌡÷≈°∙·√ⁿ²■  ", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-cp437-fc.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-cp437-fc-utf-8-filename.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "ÄÖÜßäöü", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-utf8.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ÄÖÜäöüßćçĉéèêëē", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test-utf8-unmarked.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2176057344, + "name": "ÄÖÜäöüßćçĉéèêëē", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/test2.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3632233996, + "dataHash": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", + "externalAttributes": 2176188416, + "name": "testfile.txt", + "os": 3, + "size": 4, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testbuffer.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 584907523, + "dataHash": "308832fa6739320e9290b61a8e62171a6c81519e7781ac1b225657cbb64d7bf1", + "externalAttributes": 2176188416, + "name": "teststring.txt", + "os": 3, + "size": 54, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testbuffer_reopen.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2299494936, + "dataHash": "62b88709dcc1862a09a7ce79cf438feb55ff8b333eb722b6592410bc8f714179", + "externalAttributes": 2176057344, + "name": "teststring.txt", + "os": 3, + "size": 12, + }, + { + "compressionMethod": 0, + "crc": 4162524597, + "dataHash": "99ef8951949dcfd3e94d094f238fb76c8c1cbd497cef1937d498ffa571e3d1e3", + "externalAttributes": 2176057344, + "name": "newfile.txt", + "os": 3, + "size": 11, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testbzip2.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 12, + "crc": 2956279880, + "dataHash": "7d242a3e166fc9cb48be2195fbf0a124fe42478f1f4315ef26e0d87b6ba1431c", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testchanged.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2037438768, + "dataHash": "4b839321eccc2d8b1a54edf5cf71a184c3dd484061c0354a690f28da2f397314", + "externalAttributes": 2175008768, + "name": "file1", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 2428817872, + "dataHash": "8e2b28d3ab37e2b1183043104fb38bea1b9a4ba1e90b97f07364191662ab00c4", + "externalAttributes": 2175008768, + "name": "file2", + "os": 3, + "size": 25, + }, + { + "compressionMethod": 0, + "crc": 3964873444, + "dataHash": "89880d874f8e4c11328e51e99877747caa81b3950f94c4a1887a1f6d47a5bc38", + "externalAttributes": 2175008768, + "name": "file3", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 696907016, + "dataHash": "68bb5350afcf72dd61f497b54148b3b53d1547932603d36e7875aaaf94694565", + "externalAttributes": 2175008768, + "name": "file4", + "os": 3, + "size": 25, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testchangedlocal.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2037438768, + "dataHash": "4b839321eccc2d8b1a54edf5cf71a184c3dd484061c0354a690f28da2f397314", + "externalAttributes": 2175008768, + "name": "file1", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 2428817872, + "dataHash": "8e2b28d3ab37e2b1183043104fb38bea1b9a4ba1e90b97f07364191662ab00c4", + "externalAttributes": 2175008768, + "name": "file2", + "os": 3, + "size": 25, + }, + { + "compressionMethod": 0, + "crc": 3964873444, + "dataHash": "89880d874f8e4c11328e51e99877747caa81b3950f94c4a1887a1f6d47a5bc38", + "externalAttributes": 2175008768, + "name": "file3", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 696907016, + "dataHash": "68bb5350afcf72dd61f497b54148b3b53d1547932603d36e7875aaaf94694565", + "externalAttributes": 2175008768, + "name": "file4", + "os": 3, + "size": 25, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testcomment.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2037438768, + "dataHash": "4b839321eccc2d8b1a54edf5cf71a184c3dd484061c0354a690f28da2f397314", + "externalAttributes": 2175008768, + "name": "file1", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 2428817872, + "dataHash": "8e2b28d3ab37e2b1183043104fb38bea1b9a4ba1e90b97f07364191662ab00c4", + "externalAttributes": 2175008768, + "name": "file2", + "os": 3, + "size": 25, + }, + { + "compressionMethod": 0, + "crc": 3964873444, + "dataHash": "89880d874f8e4c11328e51e99877747caa81b3950f94c4a1887a1f6d47a5bc38", + "externalAttributes": 2175008768, + "name": "file3", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 696907016, + "dataHash": "68bb5350afcf72dd61f497b54148b3b53d1547932603d36e7875aaaf94694565", + "externalAttributes": 2175008768, + "name": "file4", + "os": 3, + "size": 25, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testcomment13.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2037438768, + "dataHash": "4b839321eccc2d8b1a54edf5cf71a184c3dd484061c0354a690f28da2f397314", + "externalAttributes": 2175008768, + "name": "file1", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 3964873444, + "dataHash": "89880d874f8e4c11328e51e99877747caa81b3950f94c4a1887a1f6d47a5bc38", + "externalAttributes": 2175008768, + "name": "file3", + "os": 3, + "size": 24, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testcommentremoved.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2037438768, + "dataHash": "4b839321eccc2d8b1a54edf5cf71a184c3dd484061c0354a690f28da2f397314", + "externalAttributes": 2175008768, + "name": "file1", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 2428817872, + "dataHash": "8e2b28d3ab37e2b1183043104fb38bea1b9a4ba1e90b97f07364191662ab00c4", + "externalAttributes": 2175008768, + "name": "file2", + "os": 3, + "size": 25, + }, + { + "compressionMethod": 0, + "crc": 3964873444, + "dataHash": "89880d874f8e4c11328e51e99877747caa81b3950f94c4a1887a1f6d47a5bc38", + "externalAttributes": 2175008768, + "name": "file3", + "os": 3, + "size": 24, + }, + { + "compressionMethod": 0, + "crc": 696907016, + "dataHash": "68bb5350afcf72dd61f497b54148b3b53d1547932603d36e7875aaaf94694565", + "externalAttributes": 2175008768, + "name": "file4", + "os": 3, + "size": 25, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testdeflated.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testdeflated2.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2179792896, + "name": "abac-repeat2.txt", + "os": 3, + "size": 60, + }, + { + "compressionMethod": 8, + "crc": 2956279880, + "dataHash": "ec48329a97ea027f434aeb7e465e45fe5bdea43db81793390e81ffa0b7a011ee", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testdir.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1107099664, + "name": "testdir/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1107099664, + "name": "testdir-noslash/", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testempty.zip: libzip 1`] = ` +{ + "entries": [], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testextrabytes.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2175008768, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-UTF8.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "ÄÖÜßäöü", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-cp437.zip: jszip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "����������������", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-cp437.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "üéâäàåçêëèïîìÄÅÉ", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-ef.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180907007, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-long-comment.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-lzma.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 14, + "crc": 2698961448, + "dataHash": "1246848452c2fb7813f0a45debfdd6163222e60e7c35f208178de17602432246", + "externalAttributes": 32, + "name": "abac-repeat.txt", + "os": 0, + "size": 64, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-plus-extra.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-stored-dos.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2698961448, + "dataHash": "ded4f5b00d0bc81b4b85b217bc137246f0ad422eebea9008b2f0f54d62963bca", + "externalAttributes": 32, + "name": "abac-repeat.txt", + "os": 0, + "size": 64, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-torrentzip.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 0, + "dataHash": "9b4fb24edd6d1d8830e272398263cdbf026b97392cc35387b991dc0248a628f9", + "externalAttributes": 0, + "name": "testfile.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-torrentzip-modified.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 8, + "crc": 0, + "dataHash": "9b4fb24edd6d1d8830e272398263cdbf026b97392cc35387b991dc0248a628f9", + "externalAttributes": 0, + "name": "testfile.txt", + "os": 0, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-truncated.zip: libzip 1`] = ` +{ + "error": "Not a zip archive", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-xz.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 95, + "crc": 2698961448, + "dataHash": "010c87fdcf5b37972440c00be00d28e536547d28579d89a7e3776704f62afd27", + "externalAttributes": 32, + "name": "abac-repeat.txt", + "os": 0, + "size": 64, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile-zstd.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 93, + "crc": 2698961448, + "dataHash": "8d4f0dbc05e8f7be43f18858d0a3ec2107c88c312fce9bebd3cb90e2c9b0ecac", + "externalAttributes": 32, + "name": "abac-repeat.txt", + "os": 0, + "size": 64, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile0.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/testfile2014.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/teststdin.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 584907523, + "dataHash": "308832fa6739320e9290b61a8e62171a6c81519e7781ac1b225657cbb64d7bf1", + "externalAttributes": 2176188416, + "name": "teststring.txt", + "os": 3, + "size": 54, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/teststored.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2956279880, + "dataHash": "3c41adb58084174470a635a491a3288fbf86e468907202b68b654683dafd5481", + "externalAttributes": 2180841472, + "name": "abac-repeat.txt", + "os": 3, + "size": 60, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/utf-8-standardization-output.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 2323718681, + "dataHash": "888cb4b6f2223fe501782e434cb7e812c376403f6bbf376e097471174f23ef60", + "externalAttributes": 32, + "name": "ibm437-üéâäàåçêëè.txt", + "os": 0, + "size": 30, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip-in-archive-comment.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip-in-archive-comment.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 1001993670, + "dataHash": "f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2", + "externalAttributes": 2176057344, + "name": "test", + "os": 3, + "size": 5, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip64.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3723141383, + "dataHash": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip64-3mf.zip: jszip 1`] = ` +{ + "error": "Zip 64 is not supported", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip64-3mf.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 3723141383, + "dataHash": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7", + "externalAttributes": 293601280, + "name": "-", + "os": 3, + "size": 2, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip64-in-archive-comment.zip: jszip 1`] = ` +{ + "error": "Zip archive inconsistent", +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zip64-in-archive-comment.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 2180841472, + "name": "testfile.txt", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; + +exports[`ZipParsers can read from a zip file: libzip/zipcmp_zip_dir.zip: libzip 1`] = ` +{ + "entries": [ + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1107099664, + "name": "empty-dir/", + "os": 3, + "size": 0, + }, + { + "compressionMethod": 0, + "crc": 3904355907, + "dataHash": "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", + "externalAttributes": 2176057344, + "name": "dir-with-file/a", + "os": 3, + "size": 1, + }, + { + "compressionMethod": 0, + "crc": 0, + "dataHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "externalAttributes": 1107099664, + "name": "00-empty-dir/", + "os": 3, + "size": 0, + }, + ], + "linksCount": 0, +} +`; diff --git a/packages/yarnpkg-libzip/tests/testdata/go/comment-truncated.zip b/packages/yarnpkg-libzip/tests/testdata/go/comment-truncated.zip new file mode 100644 index 000000000000..1bc19a855759 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/comment-truncated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/crc32-not-streamed.zip b/packages/yarnpkg-libzip/tests/testdata/go/crc32-not-streamed.zip new file mode 100644 index 000000000000..f268d88732f8 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/crc32-not-streamed.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/dd.zip b/packages/yarnpkg-libzip/tests/testdata/go/dd.zip new file mode 100644 index 000000000000..e53378b0b0e5 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/dd.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/dupdir.zip b/packages/yarnpkg-libzip/tests/testdata/go/dupdir.zip new file mode 100644 index 000000000000..292720b7f01f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/dupdir.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/go-with-datadesc-sig.zip b/packages/yarnpkg-libzip/tests/testdata/go/go-with-datadesc-sig.zip new file mode 100644 index 000000000000..bcfe121bb63c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/go-with-datadesc-sig.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/readme.not.zip b/packages/yarnpkg-libzip/tests/testdata/go/readme.not.zip new file mode 100644 index 000000000000..79b1cb6de33c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/readme.not.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/readme.zip b/packages/yarnpkg-libzip/tests/testdata/go/readme.zip new file mode 100644 index 000000000000..5642a67e77d5 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/readme.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/subdir.zip b/packages/yarnpkg-libzip/tests/testdata/go/subdir.zip new file mode 100644 index 000000000000..324d06b48d19 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/subdir.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/symlink.zip b/packages/yarnpkg-libzip/tests/testdata/go/symlink.zip new file mode 100644 index 000000000000..af846938cde2 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/symlink.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/test-badbase.zip b/packages/yarnpkg-libzip/tests/testdata/go/test-badbase.zip new file mode 100644 index 000000000000..245a62cb6d11 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/test-badbase.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/test-baddirsz.zip b/packages/yarnpkg-libzip/tests/testdata/go/test-baddirsz.zip new file mode 100644 index 000000000000..45b331407624 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/test-baddirsz.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/test-prefix.zip b/packages/yarnpkg-libzip/tests/testdata/go/test-prefix.zip new file mode 100644 index 000000000000..1eabb4861ece Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/test-prefix.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/test-trailing-junk.zip b/packages/yarnpkg-libzip/tests/testdata/go/test-trailing-junk.zip new file mode 100644 index 000000000000..42281b4e3053 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/test-trailing-junk.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/test.zip b/packages/yarnpkg-libzip/tests/testdata/go/test.zip new file mode 100644 index 000000000000..03890c05d4c1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/test.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-22738.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-22738.zip new file mode 100644 index 000000000000..eb85b57103e1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-22738.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-7zip.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-7zip.zip new file mode 100644 index 000000000000..4f74819d11db Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-7zip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-go.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-go.zip new file mode 100644 index 000000000000..f008805fa42c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-go.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-infozip.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-infozip.zip new file mode 100644 index 000000000000..8e6394891f0f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-infozip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-osx.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-osx.zip new file mode 100644 index 000000000000..e82c5c229e09 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-osx.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-win7.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-win7.zip new file mode 100644 index 000000000000..8ba222b22467 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-win7.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-winrar.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-winrar.zip new file mode 100644 index 000000000000..a8a19b0f8e2e Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-winrar.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/time-winzip.zip b/packages/yarnpkg-libzip/tests/testdata/go/time-winzip.zip new file mode 100644 index 000000000000..f6e8f8ba067e Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/time-winzip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/unix.zip b/packages/yarnpkg-libzip/tests/testdata/go/unix.zip new file mode 100644 index 000000000000..ce1a981b2806 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/unix.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/utf8-7zip.zip b/packages/yarnpkg-libzip/tests/testdata/go/utf8-7zip.zip new file mode 100644 index 000000000000..0e97884559fa Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/utf8-7zip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/utf8-infozip.zip b/packages/yarnpkg-libzip/tests/testdata/go/utf8-infozip.zip new file mode 100644 index 000000000000..25a892646cec Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/utf8-infozip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/utf8-osx.zip b/packages/yarnpkg-libzip/tests/testdata/go/utf8-osx.zip new file mode 100644 index 000000000000..9b0c058b5b57 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/utf8-osx.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/utf8-winrar.zip b/packages/yarnpkg-libzip/tests/testdata/go/utf8-winrar.zip new file mode 100644 index 000000000000..4bad6c3a5e05 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/utf8-winrar.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/utf8-winzip.zip b/packages/yarnpkg-libzip/tests/testdata/go/utf8-winzip.zip new file mode 100644 index 000000000000..909d52ed2d9a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/utf8-winzip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/winxp.zip b/packages/yarnpkg-libzip/tests/testdata/go/winxp.zip new file mode 100644 index 000000000000..3919322f0c5f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/winxp.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/zip64-2.zip b/packages/yarnpkg-libzip/tests/testdata/go/zip64-2.zip new file mode 100644 index 000000000000..f844e35373e8 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/zip64-2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/go/zip64.zip b/packages/yarnpkg-libzip/tests/testdata/go/zip64.zip new file mode 100644 index 000000000000..a2ee1fa33dca Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/go/zip64.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/bigzero-zip.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/bigzero-zip.zip new file mode 100644 index 000000000000..158cb6de2214 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/bigzero-zip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/bogus.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/bogus.zip new file mode 100644 index 000000000000..7e538b626db3 --- /dev/null +++ b/packages/yarnpkg-libzip/tests/testdata/libzip/bogus.zip @@ -0,0 +1 @@ +bogus data diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/broken.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/broken.zip new file mode 100644 index 000000000000..2008c3244d97 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/broken.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchl.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchl.zip new file mode 100644 index 000000000000..7fd7159820f4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchl.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchlo.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchlo.zip new file mode 100644 index 000000000000..60eab9e1c2f4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchlo.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchlonger.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchlonger.zip new file mode 100644 index 000000000000..301ae5c91b2d Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size-muchlonger.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size.zip new file mode 100644 index 000000000000..ff71eb9df5bc Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/changing-size.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/cm-default.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/cm-default.zip new file mode 100644 index 000000000000..341edd9bb1b4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/cm-default.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/encrypt-none.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/encrypt-none.zip new file mode 100644 index 000000000000..c7ba696f5d9a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/encrypt-none.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-0.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-0.zip new file mode 100644 index 000000000000..11aaaace2373 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-0.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ef_00.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ef_00.zip new file mode 100644 index 000000000000..c07777b0016c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ef_00.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ef_ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ef_ff.zip new file mode 100644 index 000000000000..d62e0ec2ca51 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ef_ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ff.zip new file mode 100644 index 000000000000..6b05df2f24ae Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_1-ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-0.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-0.zip new file mode 100644 index 000000000000..c7072d2d2288 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-0.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ef_00.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ef_00.zip new file mode 100644 index 000000000000..68e40891573b Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ef_00.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ef_ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ef_ff.zip new file mode 100644 index 000000000000..be9510b6384a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ef_ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ff.zip new file mode 100644 index 000000000000..7bf88a053944 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_2-ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-0.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-0.zip new file mode 100644 index 000000000000..401e7b060c6b Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-0.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ef_00.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ef_00.zip new file mode 100644 index 000000000000..326f98d52810 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ef_00.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ef_ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ef_ff.zip new file mode 100644 index 000000000000..ab9d81f0dbbb Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ef_ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ff.zip new file mode 100644 index 000000000000..c6fde73b420e Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_3-ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_4-ff.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_4-ff.zip new file mode 100644 index 000000000000..c23966f43366 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/extra_field_align_4-ff.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/filename_duplicate.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/filename_duplicate.zip new file mode 100644 index 000000000000..96a11e7dd330 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/filename_duplicate.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/filename_duplicate_empty.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/filename_duplicate_empty.zip new file mode 100644 index 000000000000..c4af0d8455c5 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/filename_duplicate_empty.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/filename_empty.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/filename_empty.zip new file mode 100644 index 000000000000..d32e4e72244c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/filename_empty.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/fileorder.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/fileorder.zip new file mode 100644 index 000000000000..3fcd81a66b6d Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/fileorder.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond-split-deflated.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond-split-deflated.zip new file mode 100644 index 000000000000..35b9a5c6d885 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond-split-deflated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond-split-stored.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond-split-stored.zip new file mode 100644 index 000000000000..35f0684bf9d8 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond-split-stored.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond.zip new file mode 100644 index 000000000000..3fbe7ad1ab06 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/firstsecond.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/foo-stored.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/foo-stored.zip new file mode 100644 index 000000000000..d3adc8022793 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/foo-stored.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/gap-add.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/gap-add.zip new file mode 100644 index 000000000000..e1a015927771 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/gap-add.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/gap-delete.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/gap-delete.zip new file mode 100644 index 000000000000..7d73d008c4e5 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/gap-delete.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/gap-replace.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/gap-replace.zip new file mode 100644 index 000000000000..27e058053d74 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/gap-replace.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/gap.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/gap.zip new file mode 100644 index 000000000000..85e3bc7b71f1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/gap.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-archive-comment-longer.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-archive-comment-longer.zip new file mode 100644 index 000000000000..28d7ed365f92 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-archive-comment-longer.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-archive-comment-shorter.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-archive-comment-shorter.zip new file mode 100644 index 000000000000..d23cad4681d0 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-archive-comment-shorter.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdoffset.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdoffset.zip new file mode 100644 index 000000000000..153e7a821ec8 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdoffset.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdsize-large.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdsize-large.zip new file mode 100644 index 000000000000..58d90c0b9440 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdsize-large.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdsize-small.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdsize-small.zip new file mode 100644 index 000000000000..b840959ec185 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-cdsize-small.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compression-method.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compression-method.zip new file mode 100644 index 000000000000..1bf78f272af3 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compression-method.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-larger-toolarge.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-larger-toolarge.zip new file mode 100644 index 000000000000..1c82ef667918 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-larger-toolarge.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-larger.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-larger.zip new file mode 100644 index 000000000000..67e9a998919f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-larger.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-smaller.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-smaller.zip new file mode 100644 index 000000000000..97dd14a79861 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-compsize-smaller.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-crc.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-crc.zip new file mode 100644 index 000000000000..1f882ac66a6c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-crc.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-date.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-date.zip new file mode 100644 index 000000000000..6c831ca4867e Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-date.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-longer.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-longer.zip new file mode 100644 index 000000000000..b34c6612435c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-longer.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-shorter.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-shorter.zip new file mode 100644 index 000000000000..7769a9afc860 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-shorter.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-utf8-ascii.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-utf8-ascii.zip new file mode 100644 index 000000000000..3024f74434d1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-file-comment-utf8-ascii.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-magic-bad.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-magic-bad.zip new file mode 100644 index 000000000000..954563baa48f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-magic-bad.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-magic-bad2.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-magic-bad2.zip new file mode 100644 index 000000000000..f99d9b7194ef Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-magic-bad2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-size-larger.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-size-larger.zip new file mode 100644 index 000000000000..0779ce62ec2c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-central-size-larger.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-data.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-data.zip new file mode 100644 index 000000000000..e2ab58ae89a8 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-data.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-central-size-wrong.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-central-size-wrong.zip new file mode 100644 index 000000000000..a3f4cc118b10 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-central-size-wrong.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-utf8comment.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-utf8comment.zip new file mode 100644 index 000000000000..d467c063981c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-utf8comment.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-utf8name.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-utf8name.zip new file mode 100644 index 000000000000..948f62579290 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-utf8name.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-zip64-v1.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-zip64-v1.zip new file mode 100644 index 000000000000..2f11db4d79c4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-zip64-v1.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-zip64-v2.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-zip64-v2.zip new file mode 100644 index 000000000000..83621da2fa03 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-dupe-zip64-v2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-id-size.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-id-size.zip new file mode 100644 index 000000000000..44ce2f77d5d4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-id-size.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-id.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-id.zip new file mode 100644 index 000000000000..aad552155198 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-id.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-size.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-size.zip new file mode 100644 index 000000000000..ad167101591b Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-size.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-utf8name-ascii.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-utf8name-ascii.zip new file mode 100644 index 000000000000..d2fb3ab53dda Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-ef-local-utf8name-ascii.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-eocd-magic-bad.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-eocd-magic-bad.zip new file mode 100644 index 000000000000..9e49e56a3982 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-eocd-magic-bad.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-eocd64.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-eocd64.zip new file mode 100644 index 000000000000..680273674f57 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-eocd64.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-high.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-high.zip new file mode 100644 index 000000000000..876a886f6434 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-high.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-low.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-low.zip new file mode 100644 index 000000000000..4af9038886fe Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-low.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-overflow.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-overflow.zip new file mode 100644 index 000000000000..461722c3c761 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-file-count-overflow.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-cd.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-cd.zip new file mode 100644 index 000000000000..53746dcbf8ec Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-cd.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-eocd.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-eocd.zip new file mode 100644 index 000000000000..53d5524cfb9b Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-eocd.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-local.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-local.zip new file mode 100644 index 000000000000..23036f3c2c52 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-gap-before-local.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compression-method.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compression-method.zip new file mode 100644 index 000000000000..2e70f592de42 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compression-method.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compsize-larger.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compsize-larger.zip new file mode 100644 index 000000000000..6fc27e05df31 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compsize-larger.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compsize-smaller.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compsize-smaller.zip new file mode 100644 index 000000000000..75f14635778e Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-compsize-smaller.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-crc.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-crc.zip new file mode 100644 index 000000000000..6f74b150ffba Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-crc.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-long.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-long.zip new file mode 100644 index 000000000000..42b4a1ff136a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-long.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-missing.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-missing.zip new file mode 100644 index 000000000000..71d3eb287b20 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-missing.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-nil-byte.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-nil-byte.zip new file mode 100644 index 000000000000..e30b40636f3d Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-nil-byte.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-short.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-short.zip new file mode 100644 index 000000000000..c69be1bc0695 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename-short.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename.zip new file mode 100644 index 000000000000..18782354e8dc Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-filename.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-magic-bad.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-magic-bad.zip new file mode 100644 index 000000000000..9a6a061736b1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-magic-bad.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-size-larger.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-size-larger.zip new file mode 100644 index 000000000000..4e0bb430b2f1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-local-size-larger.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-stored-size.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-stored-size.zip new file mode 100644 index 000000000000..4fa6041ebbb5 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-stored-size.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-streamed-2.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-streamed-2.zip new file mode 100644 index 000000000000..5346f8101778 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-streamed-2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-streamed.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-streamed.zip new file mode 100644 index 000000000000..d87388a97741 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-streamed.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/incons-trailing-garbage.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-trailing-garbage.zip new file mode 100644 index 000000000000..2f090353ef6f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/incons-trailing-garbage.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/junk-at-end.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/junk-at-end.zip new file mode 100644 index 000000000000..30387b3f61c1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/junk-at-end.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/junk-at-start.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/junk-at-start.zip new file mode 100644 index 000000000000..8c983255bf84 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/junk-at-start.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/lzma-no-eos.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/lzma-no-eos.zip new file mode 100644 index 000000000000..883d851b6744 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/lzma-no-eos.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/manyfiles-zip.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/manyfiles-zip.zip new file mode 100644 index 000000000000..19ad57d66f0a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/manyfiles-zip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-default.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-default.zip new file mode 100644 index 000000000000..287fd31d556a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-default.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-dstpoint-deflated.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-dstpoint-deflated.zip new file mode 100644 index 000000000000..46c9b5567e90 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-dstpoint-deflated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-dstpoint.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-dstpoint.zip new file mode 100644 index 000000000000..5f20d32792ad Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-dstpoint.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-post-dstpoint-deflated.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-post-dstpoint-deflated.zip new file mode 100644 index 000000000000..d40e14723319 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-post-dstpoint-deflated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-post-dstpoint.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-post-dstpoint.zip new file mode 100644 index 000000000000..2a3e14d3d748 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-post-dstpoint.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-pre-dstpoint-deflated.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-pre-dstpoint-deflated.zip new file mode 100644 index 000000000000..e8f65e8234b4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-pre-dstpoint-deflated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-pre-dstpoint.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-pre-dstpoint.zip new file mode 100644 index 000000000000..cd096d18fee1 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/mtime-pre-dstpoint.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/multidisk.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/multidisk.zip new file mode 100644 index 000000000000..28dafb9ecc8f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/multidisk.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/rename_ok.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/rename_ok.zip new file mode 100644 index 000000000000..ad073060c754 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/rename_ok.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/stored-no-eos.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/stored-no-eos.zip new file mode 100644 index 000000000000..4a7745f73cda Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/stored-no-eos.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/streamed-zip64.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/streamed-zip64.zip new file mode 100644 index 000000000000..85886190bef6 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/streamed-zip64.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/streamed.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/streamed.zip new file mode 100644 index 000000000000..ab4d4946b6e9 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/streamed.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-comment-utf-8.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-comment-utf-8.zip new file mode 100644 index 000000000000..748a26967436 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-comment-utf-8.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-fc-utf-8-filename.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-fc-utf-8-filename.zip new file mode 100644 index 000000000000..7aeb8096b355 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-fc-utf-8-filename.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-fc.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-fc.zip new file mode 100644 index 000000000000..0c4f04d53139 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437-fc.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437.zip new file mode 100644 index 000000000000..9e6b91d9a888 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test-cp437.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test-utf8-unmarked.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test-utf8-unmarked.zip new file mode 100644 index 000000000000..1bcb7035ff92 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test-utf8-unmarked.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test-utf8.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test-utf8.zip new file mode 100644 index 000000000000..3045e20b86ae Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test-utf8.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test.zip new file mode 100644 index 000000000000..e4efd716b648 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test2.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test2.zip new file mode 100644 index 000000000000..ed2f60f50e32 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/test_open_multiple.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/test_open_multiple.zip new file mode 100644 index 000000000000..7dc3091a3f64 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/test_open_multiple.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testbuffer.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testbuffer.zip new file mode 100644 index 000000000000..91e7d8a8b84d Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testbuffer.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testbuffer_reopen.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testbuffer_reopen.zip new file mode 100644 index 000000000000..a46e72bc7841 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testbuffer_reopen.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testbzip2.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testbzip2.zip new file mode 100644 index 000000000000..7c9a9e72b90f Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testbzip2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testchanged.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testchanged.zip new file mode 100644 index 000000000000..d5169c96edbd Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testchanged.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testchangedlocal.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testchangedlocal.zip new file mode 100644 index 000000000000..1c8b30141448 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testchangedlocal.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testcomment.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testcomment.zip new file mode 100644 index 000000000000..45dc18d14232 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testcomment.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testcomment13.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testcomment13.zip new file mode 100644 index 000000000000..bd6e1c3277cf Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testcomment13.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testcommentremoved.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testcommentremoved.zip new file mode 100644 index 000000000000..b2e4d05dc5bd Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testcommentremoved.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testdeflated.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testdeflated.zip new file mode 100644 index 000000000000..7f6ab1cf579a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testdeflated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testdeflated2.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testdeflated2.zip new file mode 100644 index 000000000000..b5ded7d6d3fc Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testdeflated2.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testdir.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testdir.zip new file mode 100644 index 000000000000..b1e13e184314 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testdir.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testempty.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testempty.zip new file mode 100644 index 000000000000..15cb0ecb3e21 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testempty.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testextrabytes.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testextrabytes.zip new file mode 100644 index 000000000000..f2a3fb2a6d34 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testextrabytes.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-UTF8.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-UTF8.zip new file mode 100644 index 000000000000..727961545ca7 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-UTF8.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-cp437.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-cp437.zip new file mode 100644 index 000000000000..169a90311aa2 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-cp437.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-ef.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-ef.zip new file mode 100644 index 000000000000..91551ff60bfc Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-ef.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-long-comment.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-long-comment.zip new file mode 100644 index 000000000000..112ed310b52a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-long-comment.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-lzma.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-lzma.zip new file mode 100644 index 000000000000..f855b2ac69af Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-lzma.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-plus-extra.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-plus-extra.zip new file mode 100644 index 000000000000..09a6c039c3d6 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-plus-extra.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-stored-dos.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-stored-dos.zip new file mode 100644 index 000000000000..1adf55403f42 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-stored-dos.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-torrentzip-modified.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-torrentzip-modified.zip new file mode 100644 index 000000000000..8be5136b45ad Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-torrentzip-modified.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-torrentzip.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-torrentzip.zip new file mode 100644 index 000000000000..bd59ad3f3362 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-torrentzip.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-truncated.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-truncated.zip new file mode 100644 index 000000000000..05b0a7fe15c4 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-truncated.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-xz.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-xz.zip new file mode 100644 index 000000000000..6be8f9c13788 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-xz.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-zstd.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-zstd.zip new file mode 100755 index 000000000000..bf42d3e08bce Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile-zstd.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile.zip new file mode 100644 index 000000000000..2fa5ba0859f6 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile0.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile0.zip new file mode 100644 index 000000000000..5e565d14fb89 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile0.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/testfile2014.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile2014.zip new file mode 100644 index 000000000000..1d75d46ecc76 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/testfile2014.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/teststdin.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/teststdin.zip new file mode 100644 index 000000000000..e1a40a869fa2 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/teststdin.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/teststored.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/teststored.zip new file mode 100644 index 000000000000..138c6adda3bb Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/teststored.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/utf-8-standardization-output.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/utf-8-standardization-output.zip new file mode 100644 index 000000000000..3f7f08ce8501 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/utf-8-standardization-output.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/zip-in-archive-comment.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/zip-in-archive-comment.zip new file mode 100644 index 000000000000..3bd0b6a7af14 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/zip-in-archive-comment.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/zip64-3mf.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/zip64-3mf.zip new file mode 100644 index 000000000000..a2ccf240866c Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/zip64-3mf.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/zip64-in-archive-comment.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/zip64-in-archive-comment.zip new file mode 100644 index 000000000000..20a412bd105a Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/zip64-in-archive-comment.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/zip64.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/zip64.zip new file mode 100644 index 000000000000..c1ba76b7e761 Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/zip64.zip differ diff --git a/packages/yarnpkg-libzip/tests/testdata/libzip/zipcmp_zip_dir.zip b/packages/yarnpkg-libzip/tests/testdata/libzip/zipcmp_zip_dir.zip new file mode 100644 index 000000000000..8f47f21bdf3b Binary files /dev/null and b/packages/yarnpkg-libzip/tests/testdata/libzip/zipcmp_zip_dir.zip differ diff --git a/packages/yarnpkg-pnp/sources/esm-loader/fspatch.ts b/packages/yarnpkg-pnp/sources/esm-loader/fspatch.ts index ab6b2796ad94..c2d14c0ec6d2 100644 --- a/packages/yarnpkg-pnp/sources/esm-loader/fspatch.ts +++ b/packages/yarnpkg-pnp/sources/esm-loader/fspatch.ts @@ -54,7 +54,7 @@ if (!HAS_LAZY_LOADED_TRANSLATORS) { }; const originalfstat = binding.fstat; - // Those values must be synced with packages/yarnpkg-fslib/sources/ZipOpenFS.ts + // Those values must be synced with packages/yarnpkg-fslib/sources/ZipOpenFS.ts TODO???????? const ZIP_MASK = 0xff000000; const ZIP_MAGIC = 0x2a000000; diff --git a/packages/yarnpkg-pnp/sources/generateSerializedState.ts b/packages/yarnpkg-pnp/sources/generateSerializedState.ts index b86e41e66a34..09eb43b244c5 100644 --- a/packages/yarnpkg-pnp/sources/generateSerializedState.ts +++ b/packages/yarnpkg-pnp/sources/generateSerializedState.ts @@ -125,7 +125,7 @@ export function generateSerializedState(settings: PnpSettings): SerializedState dependencyTreeRoots: settings.dependencyTreeRoots, enableTopLevelFallback: settings.enableTopLevelFallback || false, ignorePatternData: settings.ignorePattern || null, - + pnpZipBackend: settings.pnpZipBackend, fallbackExclusionList: generateFallbackExclusionList(settings), fallbackPool: generateFallbackPoolData(settings), packageRegistryData: generatePackageRegistryData(settings), diff --git a/packages/yarnpkg-pnp/sources/hook.js b/packages/yarnpkg-pnp/sources/hook.js index 84f651cf2bbb..84f6ad317bc0 100644 --- a/packages/yarnpkg-pnp/sources/hook.js +++ b/packages/yarnpkg-pnp/sources/hook.js @@ -2,7 +2,7 @@ let hook; module.exports = () => { if (typeof hook === `undefined`) - hook = require('zlib').brotliDecompressSync(Buffer.from('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', 'base64')).toString(); + hook = require('zlib').brotliDecompressSync(Buffer.from('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', 'base64')).toString(); return hook; }; diff --git a/packages/yarnpkg-pnp/sources/loader/_entryPoint.ts b/packages/yarnpkg-pnp/sources/loader/_entryPoint.ts index 6a423b1cdd06..de5647c59b94 100644 --- a/packages/yarnpkg-pnp/sources/loader/_entryPoint.ts +++ b/packages/yarnpkg-pnp/sources/loader/_entryPoint.ts @@ -1,5 +1,5 @@ import {FakeFS, NodeFS, NativePath, PortablePath, VirtualFS, ProxiedFS, ppath} from '@yarnpkg/fslib'; -import {ZipOpenFS} from '@yarnpkg/libzip'; +import {ZipOpenFS, JsZipImpl} from '@yarnpkg/libzip'; import fs from 'fs'; import Module from 'module'; import StringDecoder from 'string_decoder'; @@ -20,14 +20,18 @@ const localFs: typeof fs = {...fs}; const nodeFs = new NodeFS(localFs); const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState); + const defaultPnpapiResolution = __filename; // We create a virtual filesystem that will do three things: // 1. all requests inside a folder named "__virtual___" will be remapped according the virtual folder rules // 2. all requests going inside a Zip archive will be handled by the Zip fs implementation // 3. any remaining request will be forwarded to Node as-is +const customZipImplementation = defaultRuntimeState.pnpZipBackend === `js` ? JsZipImpl : undefined; + const defaultFsLayer: FakeFS = new VirtualFS({ baseFs: new ZipOpenFS({ + customZipImplementation, baseFs: nodeFs, maxOpenFiles: 80, readOnlyArchives: true, diff --git a/packages/yarnpkg-pnp/sources/loader/hydrateRuntimeState.ts b/packages/yarnpkg-pnp/sources/loader/hydrateRuntimeState.ts index fdcf2798c499..3dd466e09c03 100644 --- a/packages/yarnpkg-pnp/sources/loader/hydrateRuntimeState.ts +++ b/packages/yarnpkg-pnp/sources/loader/hydrateRuntimeState.ts @@ -68,6 +68,7 @@ export function hydrateRuntimeState(data: SerializedState, {basePath}: HydrateRu dependencyTreeRoots, enableTopLevelFallback, fallbackExclusionList, + pnpZipBackend: data.pnpZipBackend, fallbackPool, ignorePattern, packageLocatorsByLocations, diff --git a/packages/yarnpkg-pnp/sources/types.ts b/packages/yarnpkg-pnp/sources/types.ts index 2ef3d6f0ca98..835afd2581e1 100644 --- a/packages/yarnpkg-pnp/sources/types.ts +++ b/packages/yarnpkg-pnp/sources/types.ts @@ -34,6 +34,8 @@ export type PackageRegistryData = Array<[string | null, PackageStoreData]>; export type LocationLengthData = Array; +export type PnpZipBackend = `libzip` | `js`; + // This is what is stored within the .pnp.data.json file export type SerializedState = { // @eslint-ignore-next-line @typescript-eslint/naming-convention @@ -41,6 +43,7 @@ export type SerializedState = { enableTopLevelFallback: boolean; fallbackExclusionList: Array<[string, Array]>; fallbackPool: Array<[string, DependencyTarget]>; + pnpZipBackend: PnpZipBackend; ignorePatternData: string | null; packageRegistryData: PackageRegistryData; dependencyTreeRoots: Array; @@ -52,6 +55,7 @@ export type RuntimeState = { enableTopLevelFallback: boolean; fallbackExclusionList: Map>; fallbackPool: Map; + pnpZipBackend: PnpZipBackend; ignorePattern: RegExp | null; packageLocatorsByLocations: Map; packageRegistry: PackageRegistry; @@ -86,6 +90,8 @@ export type PnpSettings = { // getDependencyTreeRoots function. They are typically the workspace // locators. dependencyTreeRoots: Array; + + pnpZipBackend: PnpZipBackend; }; export type ResolveToUnqualifiedOptions = { diff --git a/yarn.lock b/yarn.lock index d08b3099dc17..14e086273ab5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5782,6 +5782,7 @@ __metadata: "@types/emscripten": "npm:^1.39.6" "@types/prettier": "npm:1.19.0" "@yarnpkg/fslib": "workspace:^" + globby: "npm:^11.0.1" prettier: "npm:^1.19.1" tslib: "npm:^2.4.0" peerDependencies: