Skip to content

Commit eb80dca

Browse files
committed
chore: return safe copy of string slice in 'ParseStringSliceClaim'
Claims parsed should be safe to mutate and filter. This was likely not causing any bugs or issues, and just doing this out of precaution
1 parent 2e5cd29 commit eb80dca

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

coderd/idpsync/idpsync.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,9 @@ func ParseStringSliceClaim(claim interface{}) ([]string, error) {
186186
// The simple case is the type is exactly what we expected
187187
asStringArray, ok := claim.([]string)
188188
if ok {
189-
return asStringArray, nil
189+
cpy := make([]string, len(asStringArray))
190+
copy(cpy, asStringArray)
191+
return cpy, nil
190192
}
191193

192194
asArray, ok := claim.([]interface{})

coderd/idpsync/idpsync_test.go

+11
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,17 @@ func TestParseStringSliceClaim(t *testing.T) {
136136
}
137137
}
138138

139+
func TestParseStringSliceClaimReference(t *testing.T) {
140+
t.Parallel()
141+
142+
var val any = []string{"a", "b", "c"}
143+
parsed, err := idpsync.ParseStringSliceClaim(val)
144+
require.NoError(t, err)
145+
146+
parsed[0] = ""
147+
require.Equal(t, "a", val.([]string)[0], "should not modify original value")
148+
}
149+
139150
func TestIsHTTPError(t *testing.T) {
140151
t.Parallel()
141152

0 commit comments

Comments
 (0)