gh-126024: fix UBSan failure in unicodeobject.c:find_first_nonascii (GH-127566)

This commit is contained in:
Bénédikt Tran 2024-12-06 15:31:30 +01:00 committed by GitHub
parent 77a61c0465
commit 36c6178d37
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5083,12 +5083,9 @@ find_first_nonascii(const unsigned char *start, const unsigned char *end)
const unsigned char *p2 = _Py_ALIGN_UP(p, SIZEOF_SIZE_T); const unsigned char *p2 = _Py_ALIGN_UP(p, SIZEOF_SIZE_T);
#if PY_LITTLE_ENDIAN && HAVE_CTZ #if PY_LITTLE_ENDIAN && HAVE_CTZ
if (p < p2) { if (p < p2) {
#if defined(_M_AMD64) || defined(_M_IX86) || defined(__x86_64__) || defined(__i386__) size_t u;
// x86 and amd64 are little endian and can load unaligned memory. memcpy(&u, p, sizeof(size_t));
size_t u = *(const size_t*)p & ASCII_CHAR_MASK; u &= ASCII_CHAR_MASK;
#else
size_t u = load_unaligned(p, p2 - p) & ASCII_CHAR_MASK;
#endif
if (u) { if (u) {
return (ctz(u) - 7) / 8; return (ctz(u) - 7) / 8;
} }