From d3dafb399851f630c64666b869e1ec9934231efb Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 27 Jul 2024 18:16:13 +0100 Subject: [PATCH] gtktimsort: Avoid undefined behaviour on 32-bit Shifting a 32-bit type by 32 bits is formally undefined behaviour, even if it happens in code that is unreachable at runtime. Use a compile-time check against GLib's GLIB_SIZEOF_SIZE_T, instead of hoping a runtime check will be optimized away. Signed-off-by: Simon McVittie --- gtk/timsort/gtktimsort.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gtk/timsort/gtktimsort.c b/gtk/timsort/gtktimsort.c index 67846674e2..daa7c113db 100644 --- a/gtk/timsort/gtktimsort.c +++ b/gtk/timsort/gtktimsort.c @@ -157,8 +157,9 @@ gtk_tim_sort_ensure_capacity (GtkTimSort *self, new_size |= new_size >> 4; new_size |= new_size >> 8; new_size |= new_size >> 16; - if (sizeof(new_size) > 4) - new_size |= new_size >> 32; +#if GLIB_SIZEOF_SIZE_T > 4 + new_size |= new_size >> 32; +#endif new_size++; if (new_size == 0) /* (overflow) Not bloody likely! */