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
4 changes: 4 additions & 0 deletions builtin/lib.go
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,10 @@ func get(params ...any) (out any, err error) {
i := params[1]
v := reflect.ValueOf(from)

if from == nil {
return nil, nil
}

if v.Kind() == reflect.Invalid {
panic(fmt.Sprintf("cannot fetch %v from %T", i, from))
}
Expand Down
5 changes: 5 additions & 0 deletions test/fuzz/fuzz_corpus.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7221,6 +7221,11 @@ get(true ? i64 : greet, i32)
get(true ? score : true, half)?.half
get(true ? true : i, f64)
get({"foo": foo, "bar": false}, type(i))
get(nil, "a")
get({}, "a")
get(nil, "a") == nil
get({}, "a") == nil
({} | get("a") | get("b")) == nil
greet
greet != greet
greet != greet != ok
Expand Down
38 changes: 38 additions & 0 deletions test/issues/785/issue_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package issue_test

import (
"testing"

"github.com/expr-lang/expr"
"github.com/expr-lang/expr/internal/testify/require"
)

func TestIssue785(t *testing.T) {
emptyMap := map[string]any{}

env := map[string]interface{}{
"empty_map": emptyMap,
}

{
code := `get(empty_map, "non_existing_key") | get("some_key") | get("another_key") | get("yet_another_key") | get("last_key")`

program, err := expr.Compile(code, expr.Env(env))
require.NoError(t, err)

output, err := expr.Run(program, env)
require.NoError(t, err)
require.Equal(t, nil, output)
}

{
code := `{} | get("non_existing_key") | get("some_key") | get("another_key") | get("yet_another_key") | get("last_key")`

program, err := expr.Compile(code, expr.Env(env))
require.NoError(t, err)

output, err := expr.Run(program, env)
require.NoError(t, err)
require.Equal(t, nil, output)
}
}
Loading