From b7692956827b8f0f8adfaba802a8cee2964fecf7 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 27 Jul 2024 19:08:22 +0100 Subject: [PATCH] gtkcssnodedeclaration: Avoid signed left shift by 31 bits Left-shifting a signed 32-bit integer by 31 bits (such that the value overflows into the sign bit) is undefined behaviour. Use an unsigned integer instead. Detected by running a subset of the test suite with -Dsanitize=address,undefined on x86_64. Signed-off-by: Simon McVittie --- gtk/gtkcssnodedeclaration.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gtk/gtkcssnodedeclaration.c b/gtk/gtkcssnodedeclaration.c index f170efc02b..3ea0d5219f 100644 --- a/gtk/gtkcssnodedeclaration.c +++ b/gtk/gtkcssnodedeclaration.c @@ -446,9 +446,9 @@ gtk_css_node_declaration_print (const GtkCssNodeDeclaration *decl, for (i = 0; i < sizeof (GtkStateFlags) * 8; i++) { - if (decl->state & (1 << i)) + if (decl->state & (1u << i)) { - const char *name = gtk_css_pseudoclass_name (1 << i); + const char *name = gtk_css_pseudoclass_name (1u << i); g_assert (name); g_string_append_c (string, ':'); g_string_append (string, name);