yauzl
Advanced tools
Comparing version 2.9.2 to 2.10.0
17
index.js
@@ -31,2 +31,3 @@ var fs = require("fs"); | ||
if (options.validateEntrySizes == null) options.validateEntrySizes = true; | ||
if (options.strictFileNames == null) options.strictFileNames = false; | ||
if (callback == null) callback = defaultCallback; | ||
@@ -52,2 +53,3 @@ fs.open(path, "r", function(err, fd) { | ||
if (options.validateEntrySizes == null) options.validateEntrySizes = true; | ||
if (options.strictFileNames == null) options.strictFileNames = false; | ||
if (callback == null) callback = defaultCallback; | ||
@@ -71,2 +73,3 @@ fs.fstat(fd, function(err, stats) { | ||
if (options.validateEntrySizes == null) options.validateEntrySizes = true; | ||
if (options.strictFileNames == null) options.strictFileNames = false; | ||
// limit the max chunk size. see https://github.com/thejoshwolfe/yauzl/issues/87 | ||
@@ -88,2 +91,3 @@ var reader = fd_slicer.createFromBuffer(buffer, {maxChunkSize: 0x10000}); | ||
if (options.validateEntrySizes == null) options.validateEntrySizes = true; | ||
if (options.strictFileNames == null) options.strictFileNames = false; | ||
if (callback == null) callback = defaultCallback; | ||
@@ -141,3 +145,3 @@ if (typeof totalSize !== "number") throw new Error("expected totalSize parameter to be a number"); | ||
if (!(entryCount === 0xffff || centralDirectoryOffset === 0xffffffff)) { | ||
return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes)); | ||
return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames)); | ||
} | ||
@@ -183,3 +187,3 @@ | ||
// 56 - zip64 extensible data sector (variable size) | ||
return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes)); | ||
return callback(null, new ZipFile(reader, centralDirectoryOffset, totalSize, entryCount, comment, options.autoClose, options.lazyEntries, decodeStrings, options.validateEntrySizes, options.strictFileNames)); | ||
}); | ||
@@ -194,3 +198,3 @@ }); | ||
util.inherits(ZipFile, EventEmitter); | ||
function ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes) { | ||
function ZipFile(reader, centralDirectoryOffset, fileSize, entryCount, comment, autoClose, lazyEntries, decodeStrings, validateEntrySizes, strictFileNames) { | ||
var self = this; | ||
@@ -216,2 +220,3 @@ EventEmitter.call(self); | ||
self.validateEntrySizes = !!validateEntrySizes; | ||
self.strictFileNames = !!strictFileNames; | ||
self.isOpen = true; | ||
@@ -424,3 +429,7 @@ self.emittedError = false; | ||
if (self.decodeStrings) { | ||
var errorMessage = validateFileName(entry.fileName); | ||
if (!self.strictFileNames) { | ||
// allow backslash | ||
entry.fileName = entry.fileName.replace(/\\/g, "/"); | ||
} | ||
var errorMessage = validateFileName(entry.fileName, self.validateFileNameOptions); | ||
if (errorMessage != null) return emitErrorAndAutoClose(self, new Error(errorMessage)); | ||
@@ -427,0 +436,0 @@ } |
{ | ||
"name": "yauzl", | ||
"version": "2.9.2", | ||
"version": "2.10.0", | ||
"description": "yet another unzip library for node", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -68,3 +68,3 @@ # yauzl | ||
`options` may be omitted or `null`. The defaults are `{autoClose: true, lazyEntries: false, decodeStrings: true, validateEntrySizes: true}`. | ||
`options` may be omitted or `null`. The defaults are `{autoClose: true, lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. | ||
@@ -99,2 +99,13 @@ `autoClose` is effectively equivalent to: | ||
When `strictFileNames` is `false` (the default) and `decodeStrings` is `true`, | ||
all backslash (`\`) characters in each `entry.fileName` are replaced with forward slashes (`/`). | ||
The spec forbids file names with backslashes, | ||
but Microsoft's `System.IO.Compression.ZipFile` class in .NET versions 4.5.0 until 4.6.1 | ||
creates non-conformant zipfiles with backslashes in file names. | ||
`strictFileNames` is `false` by default so that clients can read these | ||
non-conformant zipfiles without knowing about this Microsoft-specific bug. | ||
When `strictFileNames` is `true` and `decodeStrings` is `true`, | ||
entries with backslashes in their file names will result in an error. See `validateFileName()`. | ||
When `decodeStrings` is `false`, `strictFileNames` has no effect. | ||
The `callback` is given the arguments `(err, zipfile)`. | ||
@@ -111,3 +122,3 @@ An `err` is provided if the End of Central Directory Record cannot be found, or if its metadata appears malformed. | ||
`options` may be omitted or `null`. The defaults are `{autoClose: false, lazyEntries: false, decodeStrings: true, validateEntrySizes: true}`. | ||
`options` may be omitted or `null`. The defaults are `{autoClose: false, lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. | ||
@@ -125,3 +136,3 @@ See `open()` for the meaning of the options and callback. | ||
`options` may be omitted or `null`. The defaults are `{lazyEntries: false, decodeStrings: true, validateEntrySizes: true}`. | ||
`options` may be omitted or `null`. The defaults are `{lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. | ||
@@ -140,3 +151,3 @@ See `open()` for the meaning of the options and callback. | ||
`options` may be omitted or `null`. The defaults are `{autoClose: true, lazyEntries: false, decodeStrings: true, validateEntrySizes: true}`. | ||
`options` may be omitted or `null`. The defaults are `{autoClose: true, lazyEntries: false, decodeStrings: true, validateEntrySizes: true, strictFileNames: false}`. | ||
@@ -164,3 +175,3 @@ See `open()` for the meaning of the options and callback. | ||
This function is automatically run for each entry, as long as `decodeStrings` is `true`. | ||
See `open()` and `Event: "entry"` for more information. | ||
See `open()`, `strictFileNames`, and `Event: "entry"` for more information. | ||
@@ -603,2 +614,4 @@ ### Class: ZipFile | ||
* 2.10.0 | ||
* Added support for non-conformant zipfiles created by Microsoft, and added option `strictFileNames` to disable the workaround. [issue #66](https://github.com/thejoshwolfe/yauzl/issues/66), [issue #88](https://github.com/thejoshwolfe/yauzl/issues/88) | ||
* 2.9.2 | ||
@@ -605,0 +618,0 @@ * Removed `tools/hexdump-zip.js` and `tools/hex2bin.js`. Those tools are now located here: [thejoshwolfe/hexdump-zip](https://github.com/thejoshwolfe/hexdump-zip) and [thejoshwolfe/hex2bin](https://github.com/thejoshwolfe/hex2bin) |
66204
748
659