From a5b5269546e02d1f2e90000e79df8409d4f269db Mon Sep 17 00:00:00 2001 From: Phil Pennock Date: Tue, 12 Apr 2011 16:26:44 -0400 Subject: [PATCH] Also ${eval:x % 0} fixed to not SIGFPE. Pointed out by: Steven A. Reisman --- src/src/expand.c | 23 +++++++++++++---------- 1 file 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; -- 2.25.1