v1.1.1: AST 链式调用插桩修复
版本说明
本补丁版本修复 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