Override `child_process.execFile` asar patch for `child_process.exec`
authorJuan Cruz Viotti <jviottidc@gmail.com>
Thu, 19 May 2016 15:08:08 +0000 (11:08 -0400)
committerJuan Cruz Viotti <jviottidc@gmail.com>
Thu, 19 May 2016 21:19:36 +0000 (17:19 -0400)
commit1a27ecdad41ba0854a8a890774e1ec67c83ee427
treea242a4a0c4b1061a93f26f359b12965770991c17
parent242508e22fb8f6c57f4a799610d1b8e363291d65
Override `child_process.execFile` asar patch for `child_process.exec`

NodeJS implements `child_process.exec` by simply passing the whole
command to `child_process.execFile`. See:

- https://github.com/nodejs/node/blob/master/lib/child_process.js#L90
- https://github.com/nodejs/node/blob/master/lib/child_process.js#L99

Electron patches `child_process.execFile` to add support for `asar`
archives by injecting logic that extracts the required files from the
`asar` to a temporary location before delegating the work to the
original `child_process.execFile`.

In order to decide whether to inject the custom `asar` extracting logic,
Electron makes use of a helper function called `splitPath()`. See:

- https://github.com/electron/electron/blob/master/lib/common/asar.js#L37

If the first argument of the returned array equals `true`, means that
the path is considered to be an `asar` archive, and thus the extraction
logic takes place. The problem is that if the command passed to
`child_process.execFile` *contains* a path to an asar archive, padded
with other commands/arguments, `splitPath()` will consider it to be an
`asar` archive, and will try to extract it, throwing a rightfully
`Invalid package` error.

Fixes: https://github.com/electron/electron/issues/5571
Signed-off-by: Juan Cruz Viotti <jviottidc@gmail.com>
lib/common/asar.js
spec/asar-spec.js