From 78c7fe8a85dda15f145511f9acf8580e795e40bc Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 10 Mar 2025 17:28:33 +0100 Subject: [PATCH] quotearg: Avoid undefined behaviour. Reported by Kirill Furman in . * lib/quotearg.c (set_char_quoting): Use 'unsigned int', not 'int', for doing bit mask operations. --- ChangeLog | 8 ++++++++ lib/quotearg.c | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index fbda8372e7..52a6f16192 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2025-03-10 Bruno Haible + + quotearg: Avoid undefined behaviour. + Reported by Kirill Furman in + . + * lib/quotearg.c (set_char_quoting): Use 'unsigned int', not 'int', for + doing bit mask operations. + 2025-03-10 Bruno Haible getlogin, getlogin_r: Document limitation. diff --git a/lib/quotearg.c b/lib/quotearg.c index a31ea3d100..a587cd5b45 100644 --- a/lib/quotearg.c +++ b/lib/quotearg.c @@ -147,8 +147,8 @@ set_char_quoting (struct quoting_options *o, char c, int i) unsigned int *p = (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; int shift = uc % INT_BITS; - int r = (*p >> shift) & 1; - *p ^= ((i & 1) ^ r) << shift; + unsigned int r = (*p >> shift) & 1; + *p ^= ((i & 1U) ^ r) << shift; return r; } -- 2.39.5