steelbrain / node-ssh

SSH2 with Promises
MIT License
947 stars 94 forks source link

execCommand throws on large outputs #474

Open urugator opened 10 months ago

urugator commented 10 months ago

execCommand provides streaming ability via onStdout/onStderr option. However, even if the option is provided, it still collects the output to own array: https://github.com/steelbrain/node-ssh/blob/6c57d8f127ab1173cee68de598ff6940575af149/src/index.ts#L394 When the output is very large it fails to convert the array to string: https://github.com/steelbrain/node-ssh/blob/main/src/index.ts#L423-L424

RangeError: Invalid string length
    at Array.join (<anonymous>)
    at Channel.<anonymous> (redacted/node_modules/node-ssh/lib/esm/index.mjs:302:47)
    at Channel.emit (node:events:526:35)
    at Channel.doClose (redacted\node_modules\ssh2\lib\utils.js:101:21)
    at Object.onceWrapper (node:events:628:28)
    at Channel.emit (node:events:526:35)
    at endReadableNT (node:internal/streams/readable:1408:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Besides the error, I think it wastes resources and defeats the purpose of using streams.

steelbrain commented 8 months ago

Besides the error, I think it wastes resources and defeats the purpose of using streams.

I agree. I am happy to accept a PR for this