mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
elf: fix handling of negative numbers in dl-printf
_dl_debug_vdprintf is a bare-bones printf implementation; currently printing a signed integer (using "%d" format specifier) behaves incorrectly when the number is negative, as it just prints the corresponding unsigned integer, preceeded by a minus sign. For example, _dl_printf("%d", -1) would print '-4294967295'. Signed-off-by: Roy Eldar <royeldar0@gmail.com> Reviewed-by: Florian Weimer <fweimer@redhat.com>
This commit is contained in:
parent
44d4d3bdcf
commit
dae8015273
@ -1,5 +1,6 @@
|
||||
/* printf implementation for the dynamic loader.
|
||||
Copyright (C) 1997-2023 Free Software Foundation, Inc.
|
||||
Copyright The GNU Toolchain Authors.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -150,19 +151,25 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
|
||||
if (long_mod)
|
||||
{
|
||||
if ((long int) num < 0)
|
||||
negative = true;
|
||||
{
|
||||
num = -num;
|
||||
negative = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((int) num < 0)
|
||||
{
|
||||
num = (unsigned int) num;
|
||||
num = -(unsigned int) num;
|
||||
negative = true;
|
||||
}
|
||||
}
|
||||
#else
|
||||
if ((int) num < 0)
|
||||
negative = true;
|
||||
{
|
||||
num = -num;
|
||||
negative = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user