max-mapper / max-mapper/extract-zip
Error: EISDIR: illegal operation on a directory
Nobody has claimed this yet.
- Dominant language
- JavaScript
- Stars
- 398
- Forks
- 144
- PR merge metrics
- No merged PRs in 30d
Description
Hi,
I m getting an error while extracting a zip file, probably made on windows, i m unsure as it s not mine, but believe so as it s about a windows binary.
The file seems not corrupted as i can unzip it with gnome unzip app.
Please see the debug output, and a test code to reproduce the error,
File downloaded at /home/mh-cbon/projects/nssm-prebuilt/dl.zip
Unzipping to /home/mh-cbon/projects/nssm-prebuilt/prebuilt
extract-zip creating target directory +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt
extract-zip opening +2ms /home/mh-cbon/projects/nssm-prebuilt/dl.zip with opts { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt' }
extract-zip zipfile entry +6ms nssm-2.24/
extract-zip extracting entry +0ms { filename: 'nssm-2.24/', isDir: true, isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/' }
extract-zip finished processing +1ms nssm-2.24/
extract-zip zipfile entry +1ms nssm-2.24/ChangeLog.txt
extract-zip extracting entry +0ms { filename: 'nssm-2.24/ChangeLog.txt',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/ChangeLog.txt
extract-zip finished processing +11ms nssm-2.24/ChangeLog.txt
extract-zip zipfile entry +0ms nssm-2.24/README.txt
extract-zip extracting entry +0ms { filename: 'nssm-2.24/README.txt',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/README.txt
extract-zip finished processing +2ms nssm-2.24/README.txt
extract-zip zipfile entry +0ms nssm-2.24/src/
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/', isDir: true, isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/' }
extract-zip finished processing +0ms nssm-2.24/src/
extract-zip zipfile entry +0ms nssm-2.24/src/account.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/account.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/account.cpp
extract-zip finished processing +1ms nssm-2.24/src/account.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/account.h
extract-zip extracting entry +1ms { filename: 'nssm-2.24/src/account.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/account.h
extract-zip finished processing +2ms nssm-2.24/src/account.h
extract-zip zipfile entry +1ms nssm-2.24/src/console.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/console.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/console.cpp
extract-zip finished processing +0ms nssm-2.24/src/console.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/console.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/console.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/console.h
extract-zip finished processing +1ms nssm-2.24/src/console.h
extract-zip zipfile entry +1ms nssm-2.24/src/env.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/env.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/env.cpp
extract-zip finished processing +1ms nssm-2.24/src/env.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/env.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/env.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/env.h
extract-zip finished processing +2ms nssm-2.24/src/env.h
extract-zip zipfile entry +0ms nssm-2.24/src/event.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/event.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/event.cpp
extract-zip finished processing +0ms nssm-2.24/src/event.cpp
extract-zip zipfile entry +0ms nssm-2.24/src/event.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/event.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/event.h
extract-zip finished processing +0ms nssm-2.24/src/event.h
extract-zip zipfile entry +0ms nssm-2.24/src/gui.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/gui.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/gui.cpp
extract-zip finished processing +0ms nssm-2.24/src/gui.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/gui.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/gui.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/gui.h
extract-zip finished processing +0ms nssm-2.24/src/gui.h
extract-zip zipfile entry +1ms nssm-2.24/src/imports.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/imports.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/imports.cpp
extract-zip finished processing +1ms nssm-2.24/src/imports.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/imports.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/imports.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/imports.h
extract-zip finished processing +1ms nssm-2.24/src/imports.h
extract-zip zipfile entry +3ms nssm-2.24/src/io.cpp
extract-zip extracting entry +1ms { filename: 'nssm-2.24/src/io.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +2ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/io.cpp
extract-zip finished processing +3ms nssm-2.24/src/io.cpp
extract-zip zipfile entry +0ms nssm-2.24/src/io.h
extract-zip extracting entry +1ms { filename: 'nssm-2.24/src/io.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/io.h
extract-zip finished processing +1ms nssm-2.24/src/io.h
extract-zip zipfile entry +1ms nssm-2.24/src/messages.mc
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/messages.mc',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/messages.mc
extract-zip finished processing +5ms nssm-2.24/src/messages.mc
extract-zip zipfile entry +0ms nssm-2.24/src/nssm.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/nssm.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/nssm.cpp
extract-zip finished processing +1ms nssm-2.24/src/nssm.cpp
extract-zip zipfile entry +0ms nssm-2.24/src/nssm.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/nssm.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/nssm.h
extract-zip finished processing +0ms nssm-2.24/src/nssm.h
extract-zip zipfile entry +0ms nssm-2.24/src/nssm.ico
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/nssm.ico',
isDir: false,
isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/nssm.ico
extract-zip finished processing +1ms nssm-2.24/src/nssm.ico
extract-zip zipfile entry +1ms nssm-2.24/src/nssm.rc
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/nssm.rc',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/nssm.rc
extract-zip finished processing +2ms nssm-2.24/src/nssm.rc
extract-zip zipfile entry +0ms nssm-2.24/src/nssm.sln
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/nssm.sln',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/nssm.sln
extract-zip finished processing +2ms nssm-2.24/src/nssm.sln
extract-zip zipfile entry +1ms nssm-2.24/src/nssm.vcproj
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/nssm.vcproj',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/nssm.vcproj
extract-zip finished processing +1ms nssm-2.24/src/nssm.vcproj
extract-zip zipfile entry +0ms nssm-2.24/src/process.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/process.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/process.cpp
extract-zip finished processing +1ms nssm-2.24/src/process.cpp
extract-zip zipfile entry +0ms nssm-2.24/src/process.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/process.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/process.h
extract-zip finished processing +0ms nssm-2.24/src/process.h
extract-zip zipfile entry +1ms nssm-2.24/src/registry.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/registry.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/registry.cpp
extract-zip finished processing +1ms nssm-2.24/src/registry.cpp
extract-zip zipfile entry +0ms nssm-2.24/src/registry.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/registry.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/registry.h
extract-zip finished processing +0ms nssm-2.24/src/registry.h
extract-zip zipfile entry +1ms nssm-2.24/src/resource.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/resource.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/resource.h
extract-zip finished processing +0ms nssm-2.24/src/resource.h
extract-zip zipfile entry +0ms nssm-2.24/src/service.cpp
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/service.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/service.cpp
extract-zip finished processing +1ms nssm-2.24/src/service.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/service.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/service.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/service.h
extract-zip finished processing +3ms nssm-2.24/src/service.h
extract-zip zipfile entry +1ms nssm-2.24/src/settings.cpp
extract-zip extracting entry +1ms { filename: 'nssm-2.24/src/settings.cpp',
isDir: false,
isSymlink: false }
extract-zip mkdirp +1ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +1ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/settings.cpp
extract-zip finished processing +1ms nssm-2.24/src/settings.cpp
extract-zip zipfile entry +1ms nssm-2.24/src/settings.h
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/settings.h',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/settings.h
extract-zip finished processing +1ms nssm-2.24/src/settings.h
extract-zip zipfile entry +0ms nssm-2.24/src/version.cmd
extract-zip extracting entry +0ms { filename: 'nssm-2.24/src/version.cmd',
isDir: false,
isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/src/version.cmd
extract-zip finished processing +0ms nssm-2.24/src/version.cmd
extract-zip zipfile entry +1ms nssm-2.24/win32/
extract-zip extracting entry +0ms { filename: 'nssm-2.24/win32/', isDir: false, isSymlink: false }
extract-zip mkdirp +0ms { dir: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24' }
extract-zip opening read stream +0ms /home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/win32/
extract-zip finished processing +0ms nssm-2.24/win32/
extract-zip write error +1ms { error:
{ [Error: EISDIR: illegal operation on a directory, open '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/win32/']
errno: -21,
code: 'EISDIR',
syscall: 'open',
path: '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/win32/' } }
Error: EISDIR: illegal operation on a directory, open '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/win32/'
at Error (native)
/home/mh-cbon/projects/nssm-prebuilt/install.js:64
throw err
^
Error: EISDIR: illegal operation on a directory, open '/home/mh-cbon/projects/nssm-prebuilt/prebuilt/nssm-2.24/win32/'
at Error (native)
test code from this repo https://github.com/mh-cbon/nssm-prebuilt
var pkg = require('./package.json')
var hyperquest = require('hyperquest')
var extract = require('extract-zip')
var path = require('path');
var async = require('async');
var fs = require('fs');
var Spinner = require('cli-spinner').Spinner;
var url = pkg["x-url"] || "https://nssm.cc/release/nssm-2.24.zip";
var dlFile = path.join(__dirname, "dl.zip")
var targetPath = path.join(__dirname, "prebuilt")
var downloadFile = function (then) {
fs.access(dlFile, fs.F_OK, function (err) {
if (!err) {
console.log("File already downloaded at %s", dlFile)
return then()
}
console.log("Downloading %s to %s", url, dlFile)
var spinner = new Spinner('please wait.. %s');
spinner.setSpinnerString('|/-\\');
spinner.start();
var r = hyperquest(url);
r.pipe(fs.createWriteStream(dlFile));
r.on('error', function (err) {
spinner.stop(true);
then(err)
})
r.on('end', function () {
spinner.stop(true);
then()
});
});
}
var createUnzipDir = function (then) {
fs.access(dlFile, fs.F_OK, function (err) {
if(err) fs.mkdir(targetPath, then)
else then()
})
}
var unzipfile = function (then) {
console.log("Unzipping to %s", targetPath)
extract(dlFile, {dir: targetPath}, then)
}
async.series([
downloadFile,
createUnzipDir,
unzipfile
], function (err) {
if (err) {
console.error(err.stack)
throw err
}
console.log("All done !")
});
It seems to be related to #13
I hope you can take a moment to help me !
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the extract-zip extraction flow and the supplied debug output and reproduction code, focusing on the directory entry followed by file entries. Reproduce the EISDIR failure with the provided archive and verify that extraction completes successfully without the error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100