Skip to content

Commit

Permalink
PR 62555: fix edge-case int overflow in apr_itoa
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1836519 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Nick Kew committed Jul 23, 2018
1 parent af517d9 commit a915da5
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions strings/apr_strings.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 = '-';
}
Expand All @@ -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 = '-';
}
Expand Down

0 comments on commit a915da5

Please sign in to comment.