From b961f92eb7d5e2f07c190f0cc83ef7fbcba42961 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 16 Jun 2025 19:31:06 +0200 Subject: [PATCH] fix: do not mutate std.removeAt parameters Resolves google/go-jsonnet#807 --- builtins.go | 4 +++- testdata/builtinRemoveAt2.golden | 7 +++++++ testdata/builtinRemoveAt2.jsonnet | 3 +++ testdata/builtinRemoveAt2.linter.golden | 0 4 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 testdata/builtinRemoveAt2.golden create mode 100644 testdata/builtinRemoveAt2.jsonnet create mode 100644 testdata/builtinRemoveAt2.linter.golden diff --git a/builtins.go b/builtins.go index 421d5d3..7843d55 100644 --- a/builtins.go +++ b/builtins.go @@ -2485,6 +2485,7 @@ func builtinRemove(i *interpreter, arrv value, ev value) (value, error) { } func builtinRemoveAt(i *interpreter, arrv value, idxv value) (value, error) { + var newArr []*cachedThunk arr, err := i.getArray(arrv) if err != nil { return nil, err @@ -2494,7 +2495,8 @@ func builtinRemoveAt(i *interpreter, arrv value, idxv value) (value, error) { return nil, err } - newArr := append(arr.elements[:idx], arr.elements[idx+1:]...) + newArr = append(newArr, arr.elements[:idx]...) + newArr = append(newArr, arr.elements[idx+1:]...) return makeValueArray(newArr), nil } diff --git a/testdata/builtinRemoveAt2.golden b/testdata/builtinRemoveAt2.golden new file mode 100644 index 0000000..7683a3f --- /dev/null +++ b/testdata/builtinRemoveAt2.golden @@ -0,0 +1,7 @@ +[ + "quux", + "foo", + "bar", + "foo", + "bar" +] diff --git a/testdata/builtinRemoveAt2.jsonnet b/testdata/builtinRemoveAt2.jsonnet new file mode 100644 index 0000000..cfdb1ff --- /dev/null +++ b/testdata/builtinRemoveAt2.jsonnet @@ -0,0 +1,3 @@ +local a = ['quux','foo','bar']; +local b = std.removeAt(a,0); +a+b \ No newline at end of file diff --git a/testdata/builtinRemoveAt2.linter.golden b/testdata/builtinRemoveAt2.linter.golden new file mode 100644 index 0000000..e69de29