Changeset: 9e10077ca026 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9e10077ca026
Modified Files:
        sql/server/sql_parser.y
Branch: Jan2022
Log Message:

For ANY/ALL quantifiers make sure right side of comparison is under 
parenthesis, so no ambiguity is created on the parser. This fixes sqlancer18 
crash


diffs (73 lines):

diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -525,6 +525,7 @@ int yydebug=1;
 
 %type <i_val>
        _transaction_mode_list
+       any_all_some
        check_identity
        datetime_field
        dealloc_ref
@@ -539,7 +540,6 @@ int yydebug=1;
        join_type
        non_second_datetime_field
        nonzero
-       opt_any_all_some
        opt_bounds
        opt_column
        opt_encrypted
@@ -3579,31 +3579,42 @@ pred_exp:
  |  predicate   { $$ = $1; }
  ;
 
-opt_any_all_some:
-               { $$ = -1; }
- |  ANY                { $$ = 0; }
+any_all_some:
+    ANY                { $$ = 0; }
  |  SOME       { $$ = 0; }
  |  ALL                { $$ = 1; }
  ;
 
 comparison_predicate:
-    pred_exp COMPARISON opt_any_all_some pred_exp
+    pred_exp COMPARISON pred_exp
                { dlist *l = L();
 
                  append_symbol(l, $1);
                  append_string(l, $2);
-                 append_symbol(l, $4);
-                 if ($3 > -1)
-                    append_int(l, $3);
+                 append_symbol(l, $3);
                  $$ = _symbol_create_list(SQL_COMPARE, l ); }
- |  pred_exp '=' opt_any_all_some pred_exp
+ |  pred_exp '=' pred_exp
                { dlist *l = L();
 
                  append_symbol(l, $1);
                  append_string(l, sa_strdup(SA, "="));
-                 append_symbol(l, $4);
-                 if ($3 > -1)
-                    append_int(l, $3);
+                 append_symbol(l, $3);
+                 $$ = _symbol_create_list(SQL_COMPARE, l ); }
+ | pred_exp COMPARISON any_all_some '(' value ')'
+               { dlist *l = L();
+
+                 append_symbol(l, $1);
+                 append_string(l, $2);
+                 append_symbol(l, $5);
+                 append_int(l, $3);
+                 $$ = _symbol_create_list(SQL_COMPARE, l ); }
+ |  pred_exp '=' any_all_some  '(' value ')'
+               { dlist *l = L();
+
+                 append_symbol(l, $1);
+                 append_string(l, sa_strdup(SA, "="));
+                 append_symbol(l, $5);
+                 append_int(l, $3);
                  $$ = _symbol_create_list(SQL_COMPARE, l ); }
  ;
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to