Skip to content

v1.1.1: AST 链式调用插桩修复

Choose a tag to compare

@github-actions github-actions released this 29 Jul 07:29
· 5 commits to main since this release

版本说明

本补丁版本修复 JSVMP AST instrumentation 在链式调用场景中生成损坏 JavaScript 的问题,对应 hello_js_reverse_skill Issue #3

排查确认:原始源码可以被 esprima 正常解析。问题发生在 AST 遍历后的改写阶段;当父子 CallExpression / MemberExpression / NewExpression 同时产生编辑时,重叠区间按原始偏移连续替换,可能残留或截断字符,导致整个脚本无法解析执行。

修复内容

  • 对 AST 编辑区间做重叠消解:仅在父子区间冲突时保留外层插桩。
  • 普通、互不重叠的成员访问与函数调用继续使用原有改写逻辑。
  • instrumentation(action="status") 新增 last_mode_used,可识别 AST、regex fallback 和超大文件跳过路径。
  • 增加 new X().m1().m2()Array.prototype.slice.call(arguments) 回归用例。
  • 版本升级至 1.1.1,依赖继续固定为 mcp>=1.29,<2

兼容性

  • 不修改 v1.1.0 已发布的安全顶层 schema 归一化策略。
  • 不修改正常插桩路径的默认参数和工具调用语义。
  • 只有原本会产生重叠编辑并损坏源码的结构会进入新的去重逻辑。
  • 省略可选参数和运行时显式传入 null 的校验行为保持不变。

验证

  • 完整测试:86 passed
  • GitHub CI:Python 3.10、3.12 均通过。
  • 约 322KB、包含 6600 个链式调用的通用压力脚本,AST 改写后可重新解析。
  • wheel 与源码包构建成功。

配套 Skill:hello_js_reverse_skill v3.4.1

完整变更v1.1.0...v1.1.1