| commit | bd716745590916b059e39ec9267ee4d038c00f77 | [log] [tgz] |
|---|---|---|
| author | Laurent Le Brun <laurentlb@google.com> | Wed Apr 15 11:05:03 2015 +0000 |
| committer | Han-Wen Nienhuys <hanwen@google.com> | Wed Apr 15 16:21:31 2015 +0000 |
| tree | 79cd7d993d7eab3ad12195c6bf7602f2a7adbb99 | |
| parent | 2e78d6108289de09fb68d3ebb0adfd7f7f372bb6 [diff] |
Catch modulo by 0 errors -- MOS_MIGRATED_REVID=91181886
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java index aa97af9..ac47b63 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/BinaryOperatorExpression.java
@@ -187,6 +187,9 @@ case PERCENT: { // int % int if (lval instanceof Integer && rval instanceof Integer) { + if (rval.equals(0)) { + throw new EvalException(getLocation(), "integer modulo by zero"); + } return ((Integer) lval).intValue() % ((Integer) rval).intValue(); }
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java index dc43088..a558805 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -248,6 +248,14 @@ } @Test + public void testModulo() throws Exception { + assertThat(eval("6 % 2")).isEqualTo(0); + assertThat(eval("6 % 4")).isEqualTo(2); + assertThat(eval("3 % 6")).isEqualTo(3); + checkEvalError("integer modulo by zero", "5 % 0"); + } + + @Test public void testMult() throws Exception { assertEquals(42, eval("6 * 7"));