aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2025-04-24 09:41:11 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2025-04-25 17:46:06 -0300
commit24d670db3330a82e79337bc4aa0c53847473a6c4 (patch)
treea28d6e5859b335facd26bec7b78b1a14202e4d76
parent789fe69a25cdc86c0e9122330b9cedb1dd478caa (diff)
downloadglibc-24d670db3330a82e79337bc4aa0c53847473a6c4.tar.xz
glibc-24d670db3330a82e79337bc4aa0c53847473a6c4.zip
stdio-common: Fix UB on stdio-common/vfprintf-process-arg.c
On i686 debug/tst-sprintf-fortify-unchecked triggers: UBSAN: Undefined behaviour in vfprintf-process-arg.c:41:57 negation of 9223372036854775808 cannot be represented in type 'long long int'
-rw-r--r--stdio-common/vfprintf-process-arg.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/stdio-common/vfprintf-process-arg.c b/stdio-common/vfprintf-process-arg.c
index a41feb2c47..fd23213e7e 100644
--- a/stdio-common/vfprintf-process-arg.c
+++ b/stdio-common/vfprintf-process-arg.c
@@ -38,7 +38,8 @@ LABEL (form_integer):
{
long long int signed_number = process_arg_long_long_int ();
is_negative = signed_number < 0;
- number.longlong = is_negative ? (- signed_number) : signed_number;
+ number.longlong = is_negative ? (- (unsigned long long) signed_number)
+ : signed_number;
goto LABEL (longlong_number);
}