It's possible that zip fails and stderr to be empty. When the callback is fired, the empty stderr will be falsey and errors will probably not be handled correctly. This can be solved by doing:

    callback(stderr || ("Zip error " + code));