summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/script.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/map/script.c b/src/map/script.c
index bad40b948..754cf6dd5 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -1006,7 +1006,7 @@ const char* parse_variable(const char* p) {
*------------------------------------------*/
const char* parse_simpleexpr(const char *p)
{
- int i;
+ long long i;
p=script->skip_space(p);
if(*p==';' || *p==',')
@@ -1031,7 +1031,14 @@ const char* parse_simpleexpr(const char *p)
} else if(ISDIGIT(*p) || ((*p=='-' || *p=='+') && ISDIGIT(p[1]))){
char *np;
while(*p == '0' && ISDIGIT(p[1])) p++;
- i=strtoul(p,&np,0);
+ i=strtoll(p,&np,0);
+ if( i < INT_MIN ) {
+ i = INT_MIN;
+ disp_error_message("parse_simpleexpr: underflow detected, capping value to INT_MIN",p);
+ } else if( i > INT_MAX ) {
+ i = INT_MAX;
+ disp_error_message("parse_simpleexpr: overflow detected, capping value to INT_MAX",p);
+ }
add_scripti(i);
p=np;
} else if(*p=='"'){