跳转至

终端等待尾窗口终止

startOfLastNonBlankLines 在其输入以换行符开头且非空行数少于请求数量时会无限循环。一旦反向游标到达零,JavaScript lastIndexOf 会将其负的起始位置钳制为零,并重新发现同一个第一个换行符。游标停止前进。

该修复在游标到达零时结束扫描,并返回现有的短尾偏移量,即零。它不更改任何提示模式或就绪规则。普通有限窗口选择情况保留其先前的偏移量。

复现

ORCA_BACKGROUND_LAUNCH=1 node docs/audits/terminal-wait-leading-blank/reproduce.mjs > /tmp/orca-terminal-wait-leading-blank.json

该脚本打包实际源代码,并且仅为基线反转两行终止更改。每个用例都在一个隔离的子进程中运行,具有两秒截止时间限制和 128 MiB 堆限制。父进程确认子进程终止;不会打开任何应用窗口。五个直接的 helper/detector 用例在修复前超时,在修复后返回。一个足够行数的对照和实际无头终端投影对照在两个变体中均通过。结果包括源代码哈希、平台、计时,以及明确的 v1.4.198 helper 比较。

回归测试套件对可能挂起 worker 的输入使用单独的子进程。它还测试带有中间空白、尾部空白以及短于请求窗口的尾部的精确行偏移量。五十个 helper/detector 测试通过。

生产环境与事故限制

该 helper 在 v1.4.198 中逐字节相同。然而,所有检查过的主/provider/renderer 可见屏幕投影路由都经过 visibleNonBlankTerminalLines,并且普通保留尾构造也会移除空行。真实的无头生产者对照确认了这种过滤。因此,直接使用以换行符开头的输入调用公共 detector 不足以证明这些生产路由会触发该缺陷。

被截断的 300 字符预览可以从换行符开始。当传入空的保留行时,预览回退也会保留它;证明记录了这两个事实。它并未确立一个将该回退与实时 detector 调用相结合的实际应用生命周期。这一点仍未得到证明。

这是在内存审计期间发现的防御性终止修复。该循环本身不会分配不断增长的集合。未测量内存量级,并且它不是对 #19768 的主进程增长或 #19831 的应用作用域 OOM 的归因。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 orca48/orca