From b5de50c0a2ede5fbc9003c759af3e86b0b7afee3 Mon Sep 17 00:00:00 2001 From: James Bardin Date: Mon, 10 Dec 2018 11:55:55 -0500 Subject: [PATCH] don't modify argument slices There were a couple spots where argument slices weren't being copied before `append` was called, which could possibly modify the caller's slice data. --- helper/schema/field_reader_diff.go | 3 +++ helper/schema/field_reader_map.go | 3 +++ 2 files changed, 6 insertions(+) diff --git a/helper/schema/field_reader_diff.go b/helper/schema/field_reader_diff.go index d558a5bc9..ae35b4a87 100644 --- a/helper/schema/field_reader_diff.go +++ b/helper/schema/field_reader_diff.go @@ -174,6 +174,9 @@ func (r *DiffFieldReader) readPrimitive( func (r *DiffFieldReader) readSet( address []string, schema *Schema) (FieldReadResult, error) { + // copy address to ensure we don't modify the argument + address = append([]string(nil), address...) + prefix := strings.Join(address, ".") + "." // Create the set that will be our result diff --git a/helper/schema/field_reader_map.go b/helper/schema/field_reader_map.go index 054efe08f..53f73b71b 100644 --- a/helper/schema/field_reader_map.go +++ b/helper/schema/field_reader_map.go @@ -98,6 +98,9 @@ func (r *MapFieldReader) readPrimitive( func (r *MapFieldReader) readSet( address []string, schema *Schema) (FieldReadResult, error) { + // copy address to ensure we don't modify the argument + address = append([]string(nil), address...) + // Get the number of elements in the list countRaw, err := r.readPrimitive( append(address, "#"), &Schema{Type: TypeInt})