aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extension/ChangeLog5
-rw-r--r--extension/intdiv.c16
2 files changed, 17 insertions, 4 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog
index d8eb6187..ef668467 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2017-04-14 Andrew J. Schorr <aschorr@telemetry-investments.com>
+
+ * intdiv.c (do_intdiv): On division by zero, return -1 and issue a
+ warning instead of throwing a fatal error.
+
2017-04-13 Andrew J. Schorr <aschorr@telemetry-investments.com>
* intdiv.c (do_intdiv): On a division by zero fatal error, there's
diff --git a/extension/intdiv.c b/extension/intdiv.c
index e3dd0eef..aa1afd18 100644
--- a/extension/intdiv.c
+++ b/extension/intdiv.c
@@ -129,8 +129,10 @@ do_intdiv(int nargs, awk_value_t *result, struct awk_ext_func *unused)
num = double_to_int(nv.num_value);
denom = double_to_int(dv.num_value);
- if (denom == 0.0)
- fatal(ext_id, _("intdiv: division by zero attempted"));
+ if (denom == 0.0) {
+ warning(ext_id, _("intdiv: division by zero attempted"));
+ return make_number(-1, result);
+ }
quotient = double_to_int(num / denom);
#ifdef HAVE_FMOD
@@ -161,8 +163,14 @@ do_intdiv(int nargs, awk_value_t *result, struct awk_ext_func *unused)
mpz_clear(numer);
return make_number(-1, result);
}
- if (mpz_sgn(denom) == 0)
- fatal(ext_id, _("intdiv: division by zero attempted"));
+ if (mpz_sgn(denom) == 0) {
+ warning(ext_id, _("intdiv: division by zero attempted"));
+ if (numer == numer_tmp)
+ mpz_clear(numer);
+ if (denom == denom_tmp)
+ mpz_clear(denom);
+ return make_number(-1, result);
+ }
/* ask gawk to allocate return values for us */
quotient = get_mpz_ptr();