check for divide by zero.
authorRalph Campbell <ralph@ucbvax.Berkeley.EDU>
Sun, 17 May 1992 02:01:52 +0000 (18:01 -0800)
committerRalph Campbell <ralph@ucbvax.Berkeley.EDU>
Sun, 17 May 1992 02:01:52 +0000 (18:01 -0800)
SCCS-vsn: bin/expr/expr.y 5.2

usr/src/bin/expr/expr.y

index f9af96c..2766cd7 100644 (file)
@@ -66,7 +66,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)expr.y     5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)expr.y     5.2 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <stdio.h>
 #endif /* not lint */
 
 #include <stdio.h>
@@ -145,8 +145,18 @@ char *arith(op, r1, r2) char *r1, *r2; {
        case ADD: i1 = i1 + i2; break;
        case SUBT: i1 = i1 - i2; break;
        case MULT: i1 = i1 * i2; break;
        case ADD: i1 = i1 + i2; break;
        case SUBT: i1 = i1 - i2; break;
        case MULT: i1 = i1 * i2; break;
-       case DIV: i1 = i1 / i2; break;
-       case REM: i1 = i1 % i2; break;
+       case DIV:
+               if (i2 != 0)
+                       i1 = i1 / i2;
+               else
+                       yyerror("Divide by zero");
+               break;
+       case REM:
+               if (i2 != 0)
+                       i1 = i1 % i2;
+               else
+                       yyerror("Remainder by zero");
+               break;
        }
        rv = malloc(16);
        (void)sprintf(rv, "%ld", i1);
        }
        rv = malloc(16);
        (void)sprintf(rv, "%ld", i1);