Android 17 da wcscspn() va wcspbrk() funksiyalarida muhim xatolar aniqlangan. Bu xatolar emoji, CJK, Kirill, Yunon va Lotin harflarini o'z ichiga olgan matnlarni to'g'ri ishlatishni buzadi. Bu xatolar 2026-yil sentyabr oyida chiqarilgan Android 17 versiyasida paydo bo'lgan.
Xatolarning tabiati
wcscspn() va wcspbrk() funksiyalarida xatolar matnning birinchi harfini to'g'ri tahlil qilmaydi. Agar matnning biror qismi emoji, CJK, Kirill, Yunon yoki Lotin harflarini o'z ichiga olsa, funksiyalar bu harflarni noto'g'ri tahlil qiladi. Bu xatolar matnlarni to'g'ri ishlatishni buzadi va dasturlarning ishini buzilishi mumkin.
#include <stdio.h>
#include <wchar.h>
int main(void)
{
wchar_t s[] = {'a', 0x1F680, 0x100, 'b', 'x', '\n', 0};
printf("wcscspn(s, L\"x\\n\") = %zu (expected 4)\n", wcscspn(s, L"x\n"));
printf("wcspbrk(s, L\"x\\n\") = index %ld (expected 4)\n", (long)(wcspbrk(s, L"x\n") - s));
printf("wcsspn(s, L\"a\\U0001F680\") = %zu (expected 2)\n", wcsspn(s, L"a\U0001F680"));
return 0;
}
Qanday aniqlangan?
Xatolar dasturchilar tomonidan disassemble qilish orqali aniqlangan. Dasturchilar wcscspn() va wcspbrk() funksiyalarini disassemble qilish orqali bu xatolarni aniqlashgan. Bu xatolar 2026-yil iyun oyida chiqarilgan Android 17 versiyasida mavjud emas edi, ammo 2026-yil sentyabr oyida chiqarilgan versiyada paydo bo'lgan.
wcscspn(s, L"x\n") = 1 (expected 4)
wcspbrk(s, L"x\n") = index 1 (expected 4)
wcsspn(s, L"a\U0001F680") = 2 (expected 2)
Ta'siri
Bu xatolar bir nechta dasturlarning ishini buzilishi mumkin. Masalan, Visual Pinball dasturi Android 17 versiyasida emoji harflarni o'z ichiga olgan matnlarni to'g'ri ishlatishni buzilishi mumkin. Bundan tashqari, FileSystem.MoveFolder funksiyasi ham bu xatolar tufayli ishini buzilishi mumkin.
a2564: ldrb w8, [x9, x8] ; table[c]
a2568: tbnz w8, #0, a2578 ; in set -> stop (correct)
a256c: ldr w8, [x22, #0x4]! ; next character
a2570: cmp w8, #0x100
a2574: b.lo a2564 ; c < 0x100 -> keep scanning
a2578: ... ; c >= 0x100 -> STOP, reported as a match
Qanday hal qilinadi?
Xatolarni hal qilish uchun dasturchilar wcscspn() va wcspbrk() funksiyalarini to'g'ri ishlatish uchun yangi kod yozishgan. Bundan tashqari, dasturchilar bu xatolarni oldini olish uchun yangi testlarni qo'shishgan. Bu testlar wcscspn() va wcspbrk() funksiyalarini to'g'ri ishlatishini ta'minlaydi.
__attribute__((__flatten__))
wchar_t* wcspbrk(const wchar_t* s, const wchar_t* delims) {
size_t i = wcscspn(s, delims);
if (s[i] != L'\0') return const_cast<wchar_t*>(s) + i;
return nullptr;
}
Bu xatolarni hal qilish uchun dasturchilar Android 17 versiyasining yangi yangilanishini chiqarishni rejalashtirganlar. Bu yangilanish xatolarni to'liq hal qilishini ta'minlaydi va dasturlarning ishini to'g'ri ishlatishini ta'minlaydi.
[ RUN ] wchar.wcscspn
bionic/tests/wchar_test.cpp:(1475) Failure in test wchar.wcscspn
Expected equality of these values:
2u
Which is: 2
wcscspn(L"he\ufffelo", L"lo")
Which is: 3
wchar.wcscspn exited with exitcode 1.
Xulosa
Android 17 da wcscspn() va wcspbrk() funksiyalarida muhim xatolar aniqlangan. Bu xatolar emoji, CJK, Kirill, Yunon va Lotin harflarini o'z ichiga olgan matnlarni to'g'ri ishlatishni buzadi. Dasturchilar bu xatolarni aniqlashgan va ularni hal qilish uchun yangi kod yozishgan. Bundan tashqari, dasturchilar bu xatolarni oldini olish uchun yangi testlarni qo'shishgan. Bu yangilanish xatolarni to'liq hal qilishini ta'minlaydi va dasturlarning ishini to'g'ri ishlatishini ta'minlaydi.
Asl manba: github.com