File tree 3 files changed +47
-0
lines changed
3 files changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -374,6 +374,10 @@ func get(params ...any) (out any, err error) {
374
374
i := params [1 ]
375
375
v := reflect .ValueOf (from )
376
376
377
+ if from == nil {
378
+ return nil , nil
379
+ }
380
+
377
381
if v .Kind () == reflect .Invalid {
378
382
panic (fmt .Sprintf ("cannot fetch %v from %T" , i , from ))
379
383
}
Original file line number Diff line number Diff line change @@ -7221,6 +7221,11 @@ get(true ? i64 : greet, i32)
7221
7221
get(true ? score : true, half)?.half
7222
7222
get(true ? true : i, f64)
7223
7223
get({"foo": foo, "bar": false}, type(i))
7224
+ get(nil, "a")
7225
+ get({}, "a")
7226
+ get(nil, "a") == nil
7227
+ get({}, "a") == nil
7228
+ ({} | get("a") | get("b")) == nil
7224
7229
greet
7225
7230
greet != greet
7226
7231
greet != greet != ok
Original file line number Diff line number Diff line change
1
+ package issue_test
2
+
3
+ import (
4
+ "testing"
5
+
6
+ "github.com/expr-lang/expr"
7
+ "github.com/expr-lang/expr/internal/testify/require"
8
+ )
9
+
10
+ func TestIssue785 (t * testing.T ) {
11
+ emptyMap := map [string ]any {}
12
+
13
+ env := map [string ]interface {}{
14
+ "empty_map" : emptyMap ,
15
+ }
16
+
17
+ {
18
+ code := `get(empty_map, "non_existing_key") | get("some_key") | get("another_key") | get("yet_another_key") | get("last_key")`
19
+
20
+ program , err := expr .Compile (code , expr .Env (env ))
21
+ require .NoError (t , err )
22
+
23
+ output , err := expr .Run (program , env )
24
+ require .NoError (t , err )
25
+ require .Equal (t , nil , output )
26
+ }
27
+
28
+ {
29
+ code := `{} | get("non_existing_key") | get("some_key") | get("another_key") | get("yet_another_key") | get("last_key")`
30
+
31
+ program , err := expr .Compile (code , expr .Env (env ))
32
+ require .NoError (t , err )
33
+
34
+ output , err := expr .Run (program , env )
35
+ require .NoError (t , err )
36
+ require .Equal (t , nil , output )
37
+ }
38
+ }
You can’t perform that action at this time.
0 commit comments