diff options
-rw-r--r-- | cmd.c | 36 |
1 files changed, 27 insertions, 9 deletions
@@ -1619,17 +1619,35 @@ static void cmd_var __P1 (char *,arg) } if (pbuf) buf = ptrdata(pbuf); - else - buf = ""; - if (isdigit(*buf)) { - idx = atoi(buf); - if (idx < -NUMVAR || idx >= NUMPARAM) { - print_error(error=OUT_RANGE_ERROR); - ptrdel(pbuf); - return; + else { + print_error(error=INVALID_NAME_ERROR); + return; + } + char err_det; + if (isdigit(*buf) || *buf=='-' || *buf=='+') { + if (sscanf(buf, "%d%c", &idx, &err_det)==1) { + if (idx < -NUMVAR || idx >= NUMPARAM) { + print_error(error=OUT_RANGE_ERROR); + ptrdel(pbuf); + return; + } + } else { + print_error(error=INVALID_NAME_ERROR); + return; } } else { - if (!(named_var = *lookup_varnode(buf, kind))) { + if (!isalpha(*buf) && *buf!='_') { + print_error(error=INVALID_NAME_ERROR); + return; + } + tmp = buf + 1; + while (*tmp && (isalnum(*tmp) || *tmp=='_')) + tmp++; + if (*tmp) { + print_error(error=INVALID_NAME_ERROR); + return; + } + if (!(named_var = *(p_named_var = lookup_varnode(buf, kind)))) { if (!deleting) { named_var = add_varnode(buf, kind); if (REAL_ERROR) { |