aboutsummaryrefslogtreecommitdiff
path: root/Source/Preprocessor/expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Preprocessor/expr.c')
-rw-r--r--Source/Preprocessor/expr.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/Source/Preprocessor/expr.c b/Source/Preprocessor/expr.c
index 6d22c8c5e..a36588983 100644
--- a/Source/Preprocessor/expr.c
+++ b/Source/Preprocessor/expr.c
@@ -188,12 +188,22 @@ static int reduce_op() {
sp--;
break;
case SWIG_TOKEN_SLASH:
- stack[sp - 2].value = stack[sp - 2].value / stack[sp].value;
- sp -= 2;
+ if (stack[sp].value != 0) {
+ stack[sp - 2].value = stack[sp - 2].value / stack[sp].value;
+ sp -= 2;
+ } else {
+ errmsg = "Division by zero in expression";
+ return 0;
+ }
break;
case SWIG_TOKEN_PERCENT:
- stack[sp - 2].value = stack[sp - 2].value % stack[sp].value;
- sp -= 2;
+ if (stack[sp].value != 0) {
+ stack[sp - 2].value = stack[sp - 2].value % stack[sp].value;
+ sp -= 2;
+ } else {
+ errmsg = "Modulo by zero in expression";
+ return 0;
+ }
break;
case SWIG_TOKEN_LSHIFT:
stack[sp - 2].value = stack[sp - 2].value << stack[sp].value;
@@ -309,6 +319,10 @@ int Preprocessor_expr(DOH *s, int *error) {
stack[sp].value = 0;
stack[sp].svalue = 0;
stack[sp].op = EXPR_VALUE;
+ } else if ((token == SWIG_TOKEN_FLOAT) || (token == SWIG_TOKEN_DOUBLE)) {
+ errmsg = "Floating point constant in preprocessor expression";
+ *error = 1;
+ return 0;
} else
goto syntax_error;
break;