File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -11,10 +11,10 @@ import (
1111)
1212
1313var (
14- // DefaultMemoryBudget represents an upper limit of memory usage
14+ // DefaultMemoryBudget represents default maximum allowed memory usage by the vm.VM.
1515 DefaultMemoryBudget uint = 1e6
1616
17- // DefaultMaxNodes represents an upper limit of AST nodes
17+ // DefaultMaxNodes represents default maximum allowed AST nodes by the compiler.
1818 DefaultMaxNodes uint = 1e4
1919)
2020
Original file line number Diff line number Diff line change @@ -197,6 +197,7 @@ func Timezone(name string) Option {
197197
198198// MaxNodes sets the maximum number of nodes allowed in the expression.
199199// By default, the maximum number of nodes is conf.DefaultMaxNodes.
200+ // If MaxNodes is set to 0, the node budget check is disabled.
200201func MaxNodes (n uint ) Option {
201202 return func (c * conf.Config ) {
202203 c .MaxNodes = n
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ import (
1010 "testing"
1111 "time"
1212
13+ "github.com/expr-lang/expr/conf"
1314 "github.com/expr-lang/expr/internal/testify/assert"
1415 "github.com/expr-lang/expr/internal/testify/require"
1516 "github.com/expr-lang/expr/types"
@@ -2729,6 +2730,16 @@ func TestMaxNodes(t *testing.T) {
27292730 require .NoError (t , err )
27302731}
27312732
2733+ func TestMaxNodesDisabled (t * testing.T ) {
2734+ code := ""
2735+ for i := 0 ; i < 2 * int (conf .DefaultMaxNodes ); i ++ {
2736+ code += "1; "
2737+ }
2738+
2739+ _ , err := expr .Compile (code , expr .MaxNodes (0 ))
2740+ require .NoError (t , err )
2741+ }
2742+
27322743func TestMemoryBudget (t * testing.T ) {
27332744 tests := []struct {
27342745 code string
You can’t perform that action at this time.
0 commit comments