HeadlinesBriefing HeadlinesBriefing.com

Ошибка широких символов в Android влияет на эмодзи и CJK

Hacker News •
×

В сборках Android 17 за сентябрь 2026 года функции wcscspn() и wcspbrk() считают совпадением любой wchar_t >= 0x100, если набор исключения содержит два или более символа, все из которых меньше U+0100. Это нарушает сканирование широких строк с ASCII-разделителями, такими как перевод строки, как только в тексте появляются эмодзи, символы CJK, кириллица, греческие или расширенные латинские символы.

Ошибка возникает из-за реализации с таблицей поиска на 256 байт, которая прекращает сканирование при встрече любого символа за пределами U+00FF и ошибочно сообщает о нём как о совпадении. Затронуты устройства со сборками за сентябрь 2026 года, включая Pixel 7 и Pixel 8a, тогда как Nothing Phone 2 с Android 16 не затронут. Регрессия появилась между публичными исходниками Android за июнь 2026 года и сборками за сентябрь.

Проблема затрагивает реальные приложения, например Visual Pinball: эмодзи в комментариях VBScript заставляют лексер неверно определять концы строк, а обработка путей к файлам принимает символы >= U+0100 за шаблоны с подстановочными знаками. Тестовый случай вида EXPECT_EQ(3u, wcscspn(L"a\u0100b\n", L"x\n")) выявил бы этот дефект. Публичные исходники Android за июнь 2026 года собирают корректные wcscspn/wcspbrk из external/llvm-libc, что подтверждает: регрессия возникла в обновлении libc.so за сентябрь.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing