execCommand throws on large outputs

未关闭
#474 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
45/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
领域
backend

调研方向

从报告中链接的 src/index.ts 里的 execCommand 输出收集部分和最终转换行开始。使用 onStdout/onStderr 重现一个输出非常大的命令,然后运行相关的项目检查;当流式处理不再导致 Invalid string length 或不必要地累积完整输出时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

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.

主要语言
TypeScript
星标
1k
派生
94
PR 合并指标
30 天内没有已合并 PR

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

steelbrain/node-ssh 的其他 Issue

查看 steelbrain/node-ssh 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。