node-getpass
node-getpass copied to clipboard
cleanup() calls fs.closeSync() after the file descriptor has already been closed
Because cleanup()
calls wtty.end()
and rtty.end()
, the wfd
and rfd
file descriptors get closed before the following mod_fs.closeSync()
calls. This results in EBADF
, since there's no longer a valid file descriptor. For example, I can reproduce this using triton
with a locked key:
cody@101901c9-6d66-ea32-fe42-f1fbebd4bf99 ~ % node --version
v0.10.46
cody@101901c9-6d66-ea32-fe42-f1fbebd4bf99 ~ % triton insts
Enter passphrase for id_ecdsa:
fs.js:409
return binding.close(fd);
^
Error: EBADF, bad file descriptor
at Object.fs.closeSync (fs.js:409:18)
at cleanup (/home/cody/.npm-global/lib/node_modules/triton/node_modules/getpass/lib/index.js:95:12)
at ReadStream.onData (/home/cody/.npm-global/lib/node_modules/triton/node_modules/getpass/lib/index.js:71:6)
at ReadStream.emit (events.js:95:17)
at ReadStream.<anonymous> (_stream_readable.js:765:14)
at ReadStream.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:427:10)
at emitReadable (_stream_readable.js:423:5)
at readableAddChunk (_stream_readable.js:166:9)
at ReadStream.Readable.push (_stream_readable.js:128:10)