AOSP 源码发布太慢,开发者只能反汇编库来报 bug — Hacker News 中文摘要
来源:github.com — 443 分 · by tharen
📋 概述
android/ndk 仓库的 issue #2260 记录了一个 bionic 的回归:在 2026 年 9 月的 Android 17 构建上,wcscspn() 与 wcspbrk() 会在字符串里遇到第一个大于等于 U+0100 的宽字符时提前停止——只要「拒绝集合」里有两个以上都小于 U+0100 的字符,这个不在集合里的字符也会被当成命中。wcsspn()、wcschr()、wcsrchr()、wmemchr() 与 wcsstr() 都正常。任何用宽字符串扫描 ASCII 分隔符(例如换行或通配符)的代码,只要文本里出现 emoji、CJK、西里尔、希腊或拉丁扩展字符就会出错;报告者在 Pixel 7、Pixel 8a 的 Android 17(2026-09-05 补丁)上复现,Nothing Phone 2 的 Android 16 正常。更值得注意的是取证方式:公开的 android17-release 源码(android-17.0.0_r1,2026 年 6 月)从 external/llvm-libc 编译出的这两函数是一个朴素的嵌套循环、逻辑正确,与九月构建的行为不符,也就是说回归发生在六月到九月的版本之间,而开发者手里没有对应源码,只能通过反汇编库来定位差异——这正是标题所指的「源码发布太慢」。
🔑 核心要点
bug 是 wcscspn()/wcspbrk() 把任何 ≥ U+0100 的宽字符当成命中 。
触发条件是拒绝集合里有两个以上小于 U+0100 的字符 。
受影响代码是任何用宽字符串扫描 ASCII 分隔符的逻辑,遇到 emoji、CJK 即出错 。
复现环境为 Pixel 7、Pixel 8a 的 Android 17 九月补丁 ,Android 16 的 Nothing Phone 2 正常。
关键线索是六月公开源码编译出的实现正确,说明回归在六月到九月之间引入 。
由于拿不到对应源码,开发者只能反汇编库来做差异分析 。
💡 金句
The public android17-release sources (android-17.0.0_r1, June 2026) build wcscspn / wcspbrk from external/llvm-libc, which is a plain nested loop over wchar_t and is correct.
👍 0
❤️ 点赞
👎 0
沉底
← 返回 Hacker News 首页