diff --git a/squirrel/sqvm.cpp b/squirrel/sqvm.cpp index 329d731..e56f43c 100644 --- a/squirrel/sqvm.cpp +++ b/squirrel/sqvm.cpp @@ -4,6 +4,7 @@ #include "sqpcheader.h" #include #include +#include #include "sqopcodes.h" #include "sqfuncproto.h" #include "sqvm.h" @@ -61,10 +62,12 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1, case '+': res = i1 + i2; break; case '-': res = i1 - i2; break; case '/': if(i2 == 0) { Raise_Error(_SC("division by zero")); return false; } + if((i1 == LONG_MIN)&&(i2 == -1)) { Raise_Error(_SC("overflow in division")); return false; } res = i1 / i2; break; case '*': res = i1 * i2; break; case '%': if(i2 == 0) { Raise_Error(_SC("modulo by zero")); return false; } + if((i1 == LONG_MIN)&&(i2 == -1)) { Raise_Error(_SC("overflow in modulo")); return false; } res = i1 % i2; break; default: res = 0xDEADBEEF;