aboutsummaryrefslogtreecommitdiffstats
path: root/builtin.c
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2017-01-26 20:17:22 -0500
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2017-01-26 20:17:22 -0500
commite1bfc3a49d45024f84f489ac6a7ebcd505ec203a (patch)
treed867f14cbca1f6771e4ab7b203ea7f5e60a83080 /builtin.c
parent820db14f26ad8d203f6c3de6b51ff7bc2ec3476f (diff)
downloadegawk-e1bfc3a49d45024f84f489ac6a7ebcd505ec203a.tar.gz
egawk-e1bfc3a49d45024f84f489ac6a7ebcd505ec203a.tar.bz2
egawk-e1bfc3a49d45024f84f489ac6a7ebcd505ec203a.zip
Fix possible string overrun in strtonum function.
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/builtin.c b/builtin.c
index 0c6cbc01..32062d08 100644
--- a/builtin.c
+++ b/builtin.c
@@ -3558,7 +3558,7 @@ do_strtonum(int nargs)
tmp = fixtype(POP_SCALAR());
if ((tmp->flags & NUMBER) != 0)
d = (AWKNUM) tmp->numbr;
- else if (get_numbase(tmp->stptr, use_lc_numeric) != 10)
+ else if (get_numbase(tmp->stptr, tmp->stlen, use_lc_numeric) != 10)
d = nondec2awknum(tmp->stptr, tmp->stlen, NULL);
else
d = (AWKNUM) force_number(tmp)->numbr;
@@ -3583,7 +3583,7 @@ nondec2awknum(char *str, size_t len, char **endptr)
short val;
char *start = str;
- if (*str == '0' && (str[1] == 'x' || str[1] == 'X')) {
+ if (len >= 2 && *str == '0' && (str[1] == 'x' || str[1] == 'X')) {
/*
* User called strtonum("0x") or some such,
* so just quit early.
@@ -3633,7 +3633,7 @@ nondec2awknum(char *str, size_t len, char **endptr)
}
if (endptr)
*endptr = str;
- } else if (*str == '0') {
+ } else if (len >= 1 && *str == '0') {
for (; len > 0; len--) {
if (! isdigit((unsigned char) *str)) {
if (endptr)