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

execCommand throws on large outputs

Open urugator opened this issue 1 year ago • 3 comments

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.

urugator avatar Jan 05 '24 12:01 urugator

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

steelbrain avatar Mar 28 '24 04:03 steelbrain