From 089fe121280c30cbb664cdfcd810c69f2e008197 Mon Sep 17 00:00:00 2001 From: "tim.schubert@tu-bs.de" Date: Wed, 26 Oct 2016 22:20:19 +0200 Subject: [PATCH] Check for division by zero and overflow / underflow. --- netcalc.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/netcalc.c b/netcalc.c index 073857f..4a3a310 100644 --- a/netcalc.c +++ b/netcalc.c @@ -127,15 +127,24 @@ int calc(unsigned int num1, unsigned int num2, char op, unsigned int *result) // TODO check for over/under flow switch (op) { case '+': - *result = num1 + num2; + if (__builtin_uadd_overflow(num1, num2, result)) { + return -1; + } break; case '-': - *result = num1 - num2; + if (__builtin_usub_overflow(num1, num2, result)) { + return -1; + } break; case '*': - *result = num1 * num2; + if (__builtin_umul_overflow(num1, num2, result)) { + return -1; + } break; case '/': + if (num1 == 0 || num2 == 0) { + return -1; + } *result = num1 / num2; break; default: