diff options
author | Phil Pennock <pdp@exim.org> | 2011-04-12 04:24:12 -0400 |
---|---|---|
committer | Phil Pennock <pdp@exim.org> | 2011-04-12 04:24:12 -0400 |
commit | 54e7ce4ad20a6977ee895a358259122bf3630090 (patch) | |
tree | b99f814fa7806bafc50fbf78eb230f57f99aa921 | |
parent | b9d8b5586790946de2fef94e0b8c43d573a71090 (diff) |
Catch divide-by-zero in ${eval:...}.
Fixes 1102
-rw-r--r-- | doc/doc-txt/ChangeLog | 3 | ||||
-rw-r--r-- | src/src/expand.c | 11 |
2 files changed, 13 insertions, 1 deletions
diff --git a/doc/doc-txt/ChangeLog b/doc/doc-txt/ChangeLog index ce78086a6..e6684b4e3 100644 --- a/doc/doc-txt/ChangeLog +++ b/doc/doc-txt/ChangeLog @@ -21,6 +21,9 @@ PP/05 Don't segfault on misconfiguration of ref:name exim-user as uid. PP/06 Extra paranoia around buffer usage at the STARTTLS transition. nb: Exim is not vulnerable to http://www.kb.cert.org/vuls/id/555316 +PP/07 Catch divide-by-zero in ${eval:...}. + Fixes bugzilla 1102. + Exim version 4.75 ----------------- diff --git a/src/src/expand.c b/src/src/expand.c index bf425ae81..06e0eb0ce 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -3107,7 +3107,16 @@ if (*error == NULL) int y = eval_op_unary(&s, decimal, error); if (*error != NULL) break; if (op == '*') x *= y; - else if (op == '/') x /= y; + else if (op == '/') + { + if (y == 0) + { + *error = US"divide by zero"; + x = 0; + break; + } + x /= y; + } else x %= y; } } |