Skip to content

v2.26.1

Choose a tag to compare

@sunnylqm sunnylqm released this 11 Sep 09:03
· 2 commits to master since this release
88b2e66

English

Improvements

  • Hermes base equivalence check now decodes HBC v98 literals per instruction. Builds with hermes-compiler (React Native 0.87+) previously fell back to comparing the dumped literal buffers as a whole, which the buffer builder's overlapping literals make unreliable — good delta builds could be rejected and shipped as a plain compile. The v98 layout (shared literal value buffer, object key buffer, object shape table) is now read from the binary, and NewObjectWithBuffer / NewObjectWithBufferAndParent are compared through the shape table. In differential fuzzing on RN 0.87's hermesc, false rejections dropped from 259 in 300 rounds to 0 in 800, with every planted difference still caught.

Fixes

  • The parent register of NewObjectWithBufferAndParent is compared as a register instead of being mistaken for a buffer operand, and the instruction is no longer folded into NewObjectWithBuffer.

Tooling

  • fuzz:hermes-base no longer reports a planted change as missed when the optimizer removed that code (Static Hermes constant-folds much more than classic hermesc).

中文

改进

  • Hermes base 等价性校验支持 HBC v98 按指令解码字面量。 使用 hermes-compiler(React Native 0.87+)的构建此前会回退为整段比较 dump 出的字面量缓冲区,而缓冲区构建器会重叠存放字面量,导致正常的增量构建可能被误拒、改发普通编译产物。现在从二进制读取 v98 布局(共享的字面量值缓冲区、对象键缓冲区、对象 shape 表),NewObjectWithBuffer / NewObjectWithBufferAndParent 通过 shape 表比较。基于 RN 0.87 hermesc 的差分模糊测试中,误拒从 300 轮 259 次降为 800 轮 0 次,植入的差异仍全部检出。

修复

  • NewObjectWithBufferAndParent 的父对象寄存器按寄存器比较,不再被误当作缓冲区操作数;该指令也不再与 NewObjectWithBuffer 混为一谈。

工具

  • fuzz:hermes-base 在植入的改动被优化器消除时(Static Hermes 的常量折叠比经典 hermesc 激进得多)不再误报为漏检。