From 35ab76d083df4a0c72448a50174c421dbf47fff3 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 11 Dec 2013 21:17:24 -0800 Subject: [PATCH] Fixed bug 2050 - Obvious bugs in SDL_ltoa and SDL_lltoa pjz SDL_ltoa(-2147483648,s,10) only returns "-" because there is a bug in the code: if ( value < 0 ) { *bufp++ = '-'; value = -value; } but -(-2147483648) is still -2147483648 (0x80000000) as signed int (or long), so the following loop doesn't run at all. Similar bug are also in SDL_lltoa. BTW, there is no sanity check for radix. --- src/stdlib/SDL_string.c | 36 ++++-------------------------------- 1 file changed, 4 insertions(+), 32 deletions(-) diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c index 980f025aebf68..f923ae7cb9edc 100644 --- a/src/stdlib/SDL_string.c +++ b/src/stdlib/SDL_string.c @@ -665,23 +665,9 @@ SDL_ltoa(long value, char *string, int radix) if (value < 0) { *bufp++ = '-'; - value = -value; - } - if (value) { - while (value > 0) { - *bufp++ = ntoa_table[value % radix]; - value /= radix; - } - } else { - *bufp++ = '0'; - } - *bufp = '\0'; - - /* The numbers went into the string backwards. :) */ - if (*string == '-') { - SDL_strrev(string + 1); + SDL_ultoa(-value, bufp, radix); } else { - SDL_strrev(string); + SDL_ultoa(value, bufp, radix); } return string; @@ -723,23 +709,9 @@ SDL_lltoa(Sint64 value, char *string, int radix) if (value < 0) { *bufp++ = '-'; - value = -value; - } - if (value) { - while (value > 0) { - *bufp++ = ntoa_table[value % radix]; - value /= radix; - } - } else { - *bufp++ = '0'; - } - *bufp = '\0'; - - /* The numbers went into the string backwards. :) */ - if (*string == '-') { - SDL_strrev(string + 1); + SDL_ulltoa(-value, bufp, radix); } else { - SDL_strrev(string); + SDL_ulltoa(value, bufp, radix); } return string;