@@ -1916,6 +1916,130 @@ TEST(FlatExprBuilderTest, FastEquality) {
19161916 EXPECT_FALSE (result.BoolOrDie ());
19171917}
19181918
1919+ TEST (FlatExprBuilderTest, FastEqualityFiltersBadCalls) {
1920+ ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" 'foo' == 'bar'" ));
1921+ parsed_expr.mutable_expr ()
1922+ ->mutable_call_expr ()
1923+ ->mutable_target ()
1924+ ->mutable_const_expr ()
1925+ ->set_string_value (" foo" );
1926+ cel::RuntimeOptions options;
1927+ options.enable_fast_builtins = true ;
1928+ InterpreterOptions legacy_options;
1929+ legacy_options.enable_fast_builtins = true ;
1930+ CelExpressionBuilderFlatImpl builder (NewTestingRuntimeEnv (), options);
1931+ ASSERT_THAT (RegisterBuiltinFunctions (builder.GetRegistry (), legacy_options),
1932+ IsOk ());
1933+ ASSERT_THAT (
1934+ builder.CreateExpression (&parsed_expr.expr (), &parsed_expr.source_info ()),
1935+ StatusIs (absl::StatusCode::kInvalidArgument ,
1936+ HasSubstr (
1937+ " unexpected number of args for builtin equality operator" )));
1938+ }
1939+
1940+ TEST (FlatExprBuilderTest, FastInequalityFiltersBadCalls) {
1941+ ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" 'foo' != 'bar'" ));
1942+ parsed_expr.mutable_expr ()
1943+ ->mutable_call_expr ()
1944+ ->mutable_target ()
1945+ ->mutable_const_expr ()
1946+ ->set_string_value (" foo" );
1947+ cel::RuntimeOptions options;
1948+ options.enable_fast_builtins = true ;
1949+ InterpreterOptions legacy_options;
1950+ legacy_options.enable_fast_builtins = true ;
1951+ CelExpressionBuilderFlatImpl builder (NewTestingRuntimeEnv (), options);
1952+ ASSERT_THAT (RegisterBuiltinFunctions (builder.GetRegistry (), legacy_options),
1953+ IsOk ());
1954+ ASSERT_THAT (
1955+ builder.CreateExpression (&parsed_expr.expr (), &parsed_expr.source_info ()),
1956+ StatusIs (absl::StatusCode::kInvalidArgument ,
1957+ HasSubstr (
1958+ " unexpected number of args for builtin equality operator" )));
1959+ }
1960+
1961+ TEST (FlatExprBuilderTest, FastInFiltersBadCalls) {
1962+ ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" a in b" ));
1963+ parsed_expr.mutable_expr ()
1964+ ->mutable_call_expr ()
1965+ ->mutable_target ()
1966+ ->mutable_const_expr ()
1967+ ->set_string_value (" foo" );
1968+ cel::RuntimeOptions options;
1969+ options.enable_fast_builtins = true ;
1970+ InterpreterOptions legacy_options;
1971+ legacy_options.enable_fast_builtins = true ;
1972+ CelExpressionBuilderFlatImpl builder (NewTestingRuntimeEnv (), options);
1973+ ASSERT_THAT (RegisterBuiltinFunctions (builder.GetRegistry (), legacy_options),
1974+ IsOk ());
1975+ ASSERT_THAT (
1976+ builder.CreateExpression (&parsed_expr.expr (), &parsed_expr.source_info ()),
1977+ StatusIs (
1978+ absl::StatusCode::kInvalidArgument ,
1979+ HasSubstr (" unexpected number of args for builtin 'in' operator" )));
1980+ }
1981+
1982+ TEST (FlatExprBuilderTest, IndexFiltersBadCalls) {
1983+ ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" a[b]" ));
1984+ parsed_expr.mutable_expr ()
1985+ ->mutable_call_expr ()
1986+ ->mutable_target ()
1987+ ->mutable_const_expr ()
1988+ ->set_string_value (" foo" );
1989+ cel::RuntimeOptions options;
1990+ options.enable_fast_builtins = true ;
1991+ InterpreterOptions legacy_options;
1992+ legacy_options.enable_fast_builtins = true ;
1993+ CelExpressionBuilderFlatImpl builder (NewTestingRuntimeEnv (), options);
1994+ ASSERT_THAT (RegisterBuiltinFunctions (builder.GetRegistry (), legacy_options),
1995+ IsOk ());
1996+ ASSERT_THAT (
1997+ builder.CreateExpression (&parsed_expr.expr (), &parsed_expr.source_info ()),
1998+ StatusIs (
1999+ absl::StatusCode::kInvalidArgument ,
2000+ HasSubstr (" unexpected number of args for builtin index operator" )));
2001+ }
2002+
2003+ TEST (FlatExprBuilderTest, NotFiltersBadCalls) {
2004+ ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" !a" ));
2005+ parsed_expr.mutable_expr ()
2006+ ->mutable_call_expr ()
2007+ ->mutable_target ()
2008+ ->mutable_const_expr ()
2009+ ->set_string_value (" foo" );
2010+ cel::RuntimeOptions options;
2011+ options.enable_fast_builtins = true ;
2012+ InterpreterOptions legacy_options;
2013+ legacy_options.enable_fast_builtins = true ;
2014+ CelExpressionBuilderFlatImpl builder (NewTestingRuntimeEnv (), options);
2015+ ASSERT_THAT (RegisterBuiltinFunctions (builder.GetRegistry (), legacy_options),
2016+ IsOk ());
2017+ ASSERT_THAT (
2018+ builder.CreateExpression (&parsed_expr.expr (), &parsed_expr.source_info ()),
2019+ StatusIs (
2020+ absl::StatusCode::kInvalidArgument ,
2021+ HasSubstr (" unexpected number of args for builtin not operator" )));
2022+ }
2023+
2024+ TEST (FlatExprBuilderTest, NotStrictlyFalseFiltersBadCalls) {
2025+ ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" !a" ));
2026+ auto * call = parsed_expr.mutable_expr ()->mutable_call_expr ();
2027+ call->mutable_target ()->mutable_const_expr ()->set_string_value (" foo" );
2028+ call->set_function (" @not_strictly_false" );
2029+ cel::RuntimeOptions options;
2030+ options.enable_fast_builtins = true ;
2031+ InterpreterOptions legacy_options;
2032+ legacy_options.enable_fast_builtins = true ;
2033+ CelExpressionBuilderFlatImpl builder (NewTestingRuntimeEnv (), options);
2034+ ASSERT_THAT (RegisterBuiltinFunctions (builder.GetRegistry (), legacy_options),
2035+ IsOk ());
2036+ ASSERT_THAT (
2037+ builder.CreateExpression (&parsed_expr.expr (), &parsed_expr.source_info ()),
2038+ StatusIs (absl::StatusCode::kInvalidArgument ,
2039+ HasSubstr (" unexpected number of args for builtin "
2040+ " not_strictly_false operator" )));
2041+ }
2042+
19192043TEST (FlatExprBuilderTest, FastEqualityDisabledWithCustomEquality) {
19202044 TestMessage message;
19212045 ASSERT_OK_AND_ASSIGN (ParsedExpr parsed_expr, parser::Parse (" 1 == b'\001 '" ));
0 commit comments