If an expression yields 0 and is then divided-by/modulus-by then the
parsing aborts. Add a debug error message to better enable debugging
when this happens.

Signed-off-by: Ian Rogers <irog...@google.com>
---
 tools/perf/util/expr.y | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/expr.y b/tools/perf/util/expr.y
index 54260094b947..21e82a1e11a2 100644
--- a/tools/perf/util/expr.y
+++ b/tools/perf/util/expr.y
@@ -103,8 +103,18 @@ expr:        NUMBER
        | expr '+' expr         { $$ = $1 + $3; }
        | expr '-' expr         { $$ = $1 - $3; }
        | expr '*' expr         { $$ = $1 * $3; }
-       | expr '/' expr         { if ($3 == 0) YYABORT; $$ = $1 / $3; }
-       | expr '%' expr         { if ((long)$3 == 0) YYABORT; $$ = (long)$1 % 
(long)$3; }
+       | expr '/' expr         { if ($3 == 0) {
+                                       pr_debug("division by zero\n");
+                                       YYABORT;
+                                 }
+                                 $$ = $1 / $3;
+                               }
+       | expr '%' expr         { if ((long)$3 == 0) {
+                                       pr_debug("division by zero\n");
+                                       YYABORT;
+                                 }
+                                 $$ = (long)$1 % (long)$3;
+                               }
        | '-' expr %prec NEG    { $$ = -$2; }
        | '(' if_expr ')'       { $$ = $2; }
        | MIN '(' expr ',' expr ')' { $$ = $3 < $5 ? $3 : $5; }
-- 
2.26.2.303.gf8c07b1a785-goog

Reply via email to