diff options
Diffstat (limited to 'GLESv2/yagl_glsl_state.c')
-rw-r--r-- | GLESv2/yagl_glsl_state.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/GLESv2/yagl_glsl_state.c b/GLESv2/yagl_glsl_state.c index 72149ab..a60785d 100644 --- a/GLESv2/yagl_glsl_state.c +++ b/GLESv2/yagl_glsl_state.c @@ -728,6 +728,7 @@ static int yagl_glsl_state_pp_solve_binary(struct yagl_glsl_state *state, { char *tmp = NULL; int a = 0, b = 0; + YAGL_LOG_FUNC_SET(yagl_glsl_state_pp_solve_binary); assert(result != NULL); @@ -753,6 +754,13 @@ static int yagl_glsl_state_pp_solve_binary(struct yagl_glsl_state *state, b = tok_b.value; } + if ((op == yagl_glsl_pp_op_mod) || (op == yagl_glsl_pp_op_div)) { + if (b == 0) { + YAGL_LOG_ERROR("Expression parse error - evaluated to division by zero"); + return 0; + } + } + switch (op) { case yagl_glsl_pp_op_or: *result = (a || b); break; case yagl_glsl_pp_op_and: *result = (a && b); break; |