Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
### Improvements

### Changes
- Adds a default for max expressions to be evaluated.
Comment thread
mismithhisler marked this conversation as resolved.
Outdated

### Fixed

### Security
### Security
3 changes: 3 additions & 0 deletions bexpr.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ func CreateEvaluator(expression string, opts ...Option) (*Evaluator, error) {
var parserOpts []grammar.Option
if parsedOpts.withMaxExpressions != 0 {
parserOpts = append(parserOpts, grammar.MaxExpressions(parsedOpts.withMaxExpressions))
} else {
// Use sane default as large expressions consume significant memory
parserOpts = append(parserOpts, grammar.MaxExpressions(2000000))
Comment thread
mismithhisler marked this conversation as resolved.
}

ast, err := grammar.Parse("", []byte(expression), parserOpts...)
Expand Down
11 changes: 8 additions & 3 deletions bexpr_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,23 @@ func TestCreateEvaluator(t *testing.T) {
"basic": {
expression: "foo == 3",
},
"default max expressions": {
expression: "((((((((foo == 1))))))))",
Comment thread
mismithhisler marked this conversation as resolved.
// typo in pigeon code-gen
err: "max number of expresssions parsed",
},
}

for name, tcase := range tests {
name := name
tcase := tcase
t.Run(name, func(t *testing.T) {
t.Parallel()

expr, err := CreateEvaluator(tcase.expression)
if tcase.err == "" {
require.NoError(t, err)
require.NotNil(t, expr)
} else {
require.Error(t, err)
require.Contains(t, err.Error(), tcase.err)
}
})
}
Expand Down
Loading