node-unzip icon indicating copy to clipboard operation
node-unzip copied to clipboard

Maximum call stack size exceeded

Open brianhiss opened this issue 12 years ago • 17 comments

When I try to unzip a file on Heroku, I am getting a Maximum call stack size exceeded if the zip file contains a file of over ~110kb. If all files are less than that, it doesn't seem to matter how big the zip file itself is. Just seems to choke on files inside the zip if larger than ~110kb.

I am using pipe: fs.createReadStream('test.zip').pipe(unzip.Extract({ path: 'test/' }))

Here is the Heroku crash log:

domain_thrown: true, POST /config { [RangeError: Maximum call stack size exceeded] domain: { domain: null, _events: { error: [Function] }, _maxListeners: 10, members: [ [Object], [Object] ] } }

brianhiss avatar Mar 07 '13 19:03 brianhiss

I'm also getting a similar (or the same) error:

node_modules/over/overload.js:18
    var args = Array.prototype.slice.call(arguments);
                                     ^
RangeError: Maximum call stack size exceeded

My zip files are about 5Mb, most work fine (and some 300Mb haven't had any issues), but some don't. I might not be able to link to a failing zip file though as it's contains sensitive information :-(

I did an npm update before posting here so should be on the latest version.

timsweb avatar Mar 07 '13 19:03 timsweb

Yeah, I saw your issue. It was closed and a patch issued, but I have cloned the latest code and still no luck.

Not quite sure why it chokes, and it seems to be platform specific issue. On Heroku (less resources) it fails. On my local Mac, it works fine for the big files.

brianhiss avatar Mar 07 '13 19:03 brianhiss

I think I know the other issue your talking about, although it's not mine. I too cloned didn't have any joy.

timsweb avatar Mar 07 '13 20:03 timsweb

I'm also experiencing this issue sporadically :/

ralphholzmann avatar Mar 10 '13 03:03 ralphholzmann

I've had a chance to look into this a little closer and have submitted a pull request (that's opened issue #17). Feel free give it a test.

timsweb avatar Mar 11 '13 11:03 timsweb

So far it's working on the use cases it was failing on for me. I will get back if I see anything different. Thank you!

brianhiss avatar Mar 11 '13 15:03 brianhiss

@timsweb @ralphholzmann @brianhiss Thanks for your help troubleshooting this issue. I wanted to get the fix in #17 up on NPM as soon as possible, so I published v0.1.5.

That said, there's a lot of logic not really about parsing zips in parse.js / untilstream.js that would be more reliable as a module based on the Node 0.10 stream.Transform with its own tests. I'll leave this issue open until the logic's impending move barring problems with the match-stream module. Expect an update to this issue soon. I know some zips that have failed to extract in the past contain sensitive information and would appreciate your help again to test.

EvanOxfeld avatar Mar 12 '13 00:03 EvanOxfeld

@EvanOxfeld An user complained about this very same issue here: https://github.com/twitter/bower/issues/312 I think that's a good test case.

satazor avatar Mar 17 '13 10:03 satazor

Really appreciate the test case, @satazor. I'll get it integrated into the unzip tests.

EvanOxfeld avatar Mar 17 '13 20:03 EvanOxfeld

I'm not sure if this is a useful clue or not, but for the same file I can repeatably cause #16 to break or not break by...wait for it...changing from 1 CPU to 2 CPUs!

Configuration

  • Node v0.8.22
  • unzip v0.1.4 (v0.1.5 "hangs" on me)

1 CPU: Breaks every time

  • AWS EC2 Micro Instance, Ubuntu 12.04.1 LTS (~640 MB, 1 CPU)
  • VirtualBox, Ubuntu 12.04.1 LTS (640 MB, 1 CPU)

2 CPUs: Works every time

  • Mac mini Server, OS X Lion (16 GB, 4 cores)
  • VirtualBox, Ubuntu 12.04.1 LTS (640 MB, 2 CPUs)

nprbst avatar Mar 27 '13 01:03 nprbst

@EvanOxfeld Some more details on unzip 0.1.6

node 0.10.3

bootstrap.zip

var unzip = require('unzip');
var fs = require('fs');

fs.createReadStream('bootstrap.zip')
    .pipe(unzip.Extract({ path: 'test' }))
    .on('error', function (err) { console.log('error', err); })
    .on('close', function () { console.log('closed'); });

Works!

jquery-ui-1.10.0.custom.zip

var unzip = require('unzip');
var fs = require('fs');

fs.createReadStream('jquery-ui-1.10.0.custom.zip')
    .pipe(unzip.Extract({ path: 'test' }))
    .on('error', function (err) { console.log('error', err); })
    .on('close', function () { console.log('closed'); });

Fails.. it previously worked. Here's the stack trace:

events.js:72
        throw er; // Unhandled 'error' event
              ^
TypeError: Invalid non-string/buffer chunk
    at chunkInvalid (_stream_readable.js:339:10)
    at readableAddChunk (_stream_readable.js:126:12)
    at Match.Readable.push (_stream_readable.js:113:10)
    at Match.Transform.push (_stream_transform.js:142:32)
    at Match._matchFn (/Users/satazor/Work/twitter/bower/node_modules/unzip/lib/parse.js:161:31)
    at Match._transform (/Users/satazor/Work/twitter/bower/node_modules/unzip/node_modules/match-stream/match.js:39:10)
    at Match.Transform._read (_stream_transform.js:181:10)
    at Match.Transform._write (_stream_transform.js:169:12)
    at doWrite (_stream_writable.js:211:10)
    at writeOrBuffer (_stream_writable.js:201:5)

node 0.8.22

bootstrap.zip

It just hangs while extracting, high CPU usage

jquery-ui-1.10.0.custom.zip

Fails with the same error as the node 0.10.3

satazor avatar Apr 03 '13 22:04 satazor

Thanks for the info @satazor - I'm close to a fix, at least for node 0.10.3.

EvanOxfeld avatar Apr 04 '13 06:04 EvanOxfeld

@EvanOxfeld after upgrading to 0.1.7, all issues present in my previous comment still exist. Shall I create a separate issue?

satazor avatar Apr 07 '13 14:04 satazor

@satazor If you have a chance, check out #23 - fixes for node 0.10.x, close for node 0.8.x. I'll have more time to devote to fixing this issue later today.

EvanOxfeld avatar Apr 07 '13 16:04 EvanOxfeld

Is there any updates on this? It's currently a pressing issue for Bower.

sindresorhus avatar Apr 22 '13 21:04 sindresorhus

I have the same problem

Node: 0.10.12 Bower: 0.10.0 unzip: 0.1.8

euskadi31 avatar Jul 04 '13 21:07 euskadi31

Just another sample:

bower downloading http://www.playcraftlabs.com/downloads/playcraft-v0.5.6a.zip
bower extracting /tmp/bower-playcraft-v0.5.6a-2119dtushkw/index.zip

/home/alfred/nvm/v0.10.12/lib/node_modules/bower/node_modules/tmp/lib/tmp.js:260
  throw err;
        ^
TypeError: Invalid non-string/buffer chunk
    at chunkInvalid (_stream_readable.js:365:10)
    at readableAddChunk (_stream_readable.js:137:12)
    at Match.Readable.push (_stream_readable.js:127:10)
    at Match.Transform.push (_stream_transform.js:140:32)
    at Match._matchFn (/home/alfred/nvm/v0.10.12/lib/node_modules/bower/node_modules/unzip/lib/parse.js:161:31)
    at Match._transform (/home/alfred/nvm/v0.10.12/lib/node_modules/bower/node_modules/unzip/node_modules/match-stream/match.js:39:10)
    at Match.Transform._read (_stream_transform.js:179:10)
    at Match.Transform._write (_stream_transform.js:167:12)
    at doWrite (_stream_writable.js:219:10)
    at writeOrBuffer (_stream_writable.js:209:5)
    at Match.Writable.write (_stream_writable.js:180:11)
    at write (_stream_readable.js:573:24)

With the following modules:

[email protected] /home/alfred/nvm/v0.8.25/lib/node_modules/bower
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected])
└── [email protected] ([email protected], [email protected])

faridnsh avatar Jul 22 '13 15:07 faridnsh