diff options
author | Phil Pennock <pdp@exim.org> | 2011-04-12 16:26:44 -0400 |
---|---|---|
committer | Phil Pennock <pdp@exim.org> | 2011-04-12 16:26:44 -0400 |
commit | a5b5269546e02d1f2e90000e79df8409d4f269db (patch) | |
tree | 2548d08cb1728b4b6057a6e352e90a3fe4a6d185 | |
parent | 54e7ce4ad20a6977ee895a358259122bf3630090 (diff) |
Also ${eval:x % 0} fixed to not SIGFPE.
Pointed out by: Steven A. Reisman
-rw-r--r-- | src/src/expand.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/src/expand.c b/src/src/expand.c index 06e0eb0ce..fece8c150 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -3106,18 +3106,21 @@ if (*error == NULL) int op = *s++; int y = eval_op_unary(&s, decimal, error); if (*error != NULL) break; - if (op == '*') x *= y; - else if (op == '/') + if (op == '*') + x *= y; + else + { + if (y == 0) { - if (y == 0) - { - *error = US"divide by zero"; - x = 0; - break; - } - x /= y; + *error = (op == '/') ? US"divide by zero" : US"modulo by zero"; + x = 0; + break; } - else x %= y; + if (op == '/') + x /= y; + else + x %= y; + } } } *sptr = s; |