Задержка исходников Android 17 вынудила разработчика дизассемблировать библиотеку

Задержка исходников Android 17 вынудила разработчика дизассемблировать библиотеку

Изображение: OpenAI

Из-за задержки публикации исходников Android 17 разработчику пришлось дизассемблировать системную библиотеку, чтобы найти причину ошибки в сентябрьских сборках. В отчёте на GitHub он описал сбой при поиске разделителей в тексте с кириллицей и эмодзи.

После сентябрьского обновления в Visual Pinball для Android перестали загружаться игровые столы, если комментарии в их VBScript-коде содержали эмодзи. Поиск конца комментария останавливался на эмодзи, и лексический анализатор выдавал сообщение о недопустимом символе. В используемом приложением движке VBScript libwinevbs метод FileSystem.MoveFolder также ошибочно принимал любой путь с символом от U+0100 за шаблон подстановки.

Сбой затрагивает функции wcscspn() и wcspbrk(). Автор воспроизвёл его на Pixel 8a: ошибка возникает, если искомый набор состоит минимум из двух символов, каждый из которых ниже U+0100.

В поставляемой библиотеке libc.so автор обнаружил ошибку в ветке поиска, которая использует таблицу из 256 элементов. При встрече символа от U+0100 код прекращает поиск, хотя такого символа заведомо нет в заданном наборе. При поиске одного символа или наличии в наборе символа от U+0100 ошибки нет.

В публичных исходниках Android 17 за июнь 2026 года эти функции реализованы иначе и работают корректно. По данным автора, ошибка появилась между июньским и сентябрьским выпусками. Существующий тест wcspbrk() в bionic проверяет только ASCII-строки и поэтому не обнаруживает сбой.

В libwinevbs проблему обошли, заменив вызовы ошибочных функций обычными циклами. Это изменение уже включили в код Visual Pinball.

Сергей
Автор: Сергей
Пишу о кибербезопасности и информационных технологиях на простом и понятном языке
Комментарии:

Как мы обрабатываем данные: политика обработки персональных данных