gh-127563: use dk_log2_index_bytes=3 in empty dicts (GH-127568)

This fixes a UBSan failure (unaligned zero-size memcpy) in `dictobject.c`.
This commit is contained in:
Bénédikt Tran 2024-12-10 16:58:17 +01:00 committed by GitHub
parent cef0a90d8f
commit 9af96f4406
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -588,11 +588,14 @@ estimate_log2_keysize(Py_ssize_t n)
/* This immutable, empty PyDictKeysObject is used for PyDict_Clear()
* (which cannot fail and thus can do no allocation).
*
* See https://github.com/python/cpython/pull/127568#discussion_r1868070614
* for the rationale of using dk_log2_index_bytes=3 instead of 0.
*/
static PyDictKeysObject empty_keys_struct = {
_Py_DICT_IMMORTAL_INITIAL_REFCNT, /* dk_refcnt */
0, /* dk_log2_size */
0, /* dk_log2_index_bytes */
3, /* dk_log2_index_bytes */
DICT_KEYS_UNICODE, /* dk_kind */
#ifdef Py_GIL_DISABLED
{0}, /* dk_mutex */