Skip to content

Commit

Permalink
Fixed bug 2050 - Obvious bugs in SDL_ltoa and SDL_lltoa
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
slouken committed Dec 12, 2013
1 parent fcf6922 commit 35ab76d
Showing 1 changed file with 4 additions and 32 deletions.
36 changes: 4 additions & 32 deletions src/stdlib/SDL_string.c
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 35ab76d

Please sign in to comment.