PR 62555: fix edge-case int overflow in apr_itoa
@@ -362,19 +362,21 @@ APR_DECLARE(char *) apr_itoa(apr_pool_t *p, int n)
const int BUFFER_SIZE = sizeof(int) * 3 + 2;
char *buf = apr_palloc(p, BUFFER_SIZE);
char *start = buf + BUFFER_SIZE - 1;
+ unsigned int un;
int negative;
if (n < 0) {
negative = 1;
- n = -n;
+ un = -n;
}
else {
negative = 0;
+ un = n;
}
*start = 0;
do {
- *--start = '0' + (n % 10);
- n /= 10;
- } while (n);
+ *--start = '0' + (un % 10);
+ un /= 10;
+ } while (un);
if (negative) {
*--start = '-';
}
@@ -387,18 +389,20 @@ APR_DECLARE(char *) apr_ltoa(apr_pool_t *p, long n)
char *buf = apr_palloc(p, BUFFER_SIZE);
char *start = buf + BUFFER_SIZE - 1;
int negative;
+ unsigned int un;
if (n < 0) {
negative = 1;
- n = -n;
+ un = -n;
}
else {
negative = 0;
+ un = n;
}
*start = 0;
do {
- *--start = (char)('0' + (n % 10));
- n /= 10;
- } while (n);
+ *--start = (char)('0' + (un % 10));
+ un /= 10;
+ } while (un);
if (negative) {
*--start = '-';
}
