diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ea14c1f..1459a384 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -29,12 +29,12 @@ jobs: windows-2022 ] go-version: [ - 1.18.10, - 1.19.13, - 1.20.14, - 1.21.13, - 1.22.9, - 1.23.3, + 1.18.x, + 1.19.x, + 1.20.x, + 1.21.x, + 1.22.x, + 1.23.x, ] permissions: contents: read diff --git a/go.mod b/go.mod index f5f589cc..2e2e2ffc 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/google/uuid v1.6.0 github.com/h2so5/here v0.0.0-20200815043652-5e14eb691fae github.com/montanaflynn/stats v0.7.1 - github.com/spyzhov/ajson v0.9.5 + github.com/spyzhov/ajson v0.9.6 go.starlark.net v0.0.0-20240123142251-f86470692795 go.uber.org/atomic v1.11.0 go.uber.org/zap v1.24.0 diff --git a/go.sum b/go.sum index f58bbbf6..d9b5a47f 100644 --- a/go.sum +++ b/go.sum @@ -48,8 +48,8 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/spyzhov/ajson v0.9.5 h1:/W2YIkLtwQ0W01qABeX89sXK1AV4+bUhc/3uLj3MToo= -github.com/spyzhov/ajson v0.9.5/go.mod h1:a6oSw0MMb7Z5aD2tPoPO+jq11ETKgXUr2XktHdT8Wt8= +github.com/spyzhov/ajson v0.9.6 h1:iJRDaLa+GjhCDAt1yFtU/LKMtLtsNVKkxqlpvrHHlpQ= +github.com/spyzhov/ajson v0.9.6/go.mod h1:a6oSw0MMb7Z5aD2tPoPO+jq11ETKgXUr2XktHdT8Wt8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/lib/json/json.go b/lib/json/json.go index e1c718a5..0efa17f6 100644 --- a/lib/json/json.go +++ b/lib/json/json.go @@ -6,8 +6,6 @@ import ( "encoding/json" "fmt" "math" - "sort" - "strconv" "sync" itn "github.com/1set/starlet/dataconv" @@ -290,29 +288,12 @@ func ajsonNodeToStarlarkValue(node *ajson.Node) (starlark.Value, error) { } return dict, nil case ajson.Array: - // Use keys and indices to avoid relying on invalid index pointers - keys := node.Keys() - if len(keys) == 0 { - return starlark.NewList(nil), nil - } - indices := make([]int, len(keys)) - indexMap := make(map[int]*ajson.Node) - for i, key := range keys { - idx, err := strconv.Atoi(key) - if err != nil { - return nil, fmt.Errorf("invalid array index: %v", err) - } - indices[i] = idx - child, err := node.GetIndex(idx) - if err != nil { - return nil, err - } - indexMap[idx] = child + elements, err := node.GetArray() + if err != nil { + return nil, err } - sort.Ints(indices) - vals := make([]starlark.Value, len(indices)) - for i, idx := range indices { - elem := indexMap[idx] + vals := make([]starlark.Value, len(elements)) + for i, elem := range elements { val, err := ajsonNodeToStarlarkValue(elem) if err != nil { return nil, err