max-mapper / max-mapper/extract-zip

Error: EISDIR: illegal operation on a directory

Open
#24 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

help wanted
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.