From 803885049b9a8c0349af67d9912f735ba2b1f029 Mon Sep 17 00:00:00 2001 From: Francesc Campoy Date: Fri, 16 Jul 2021 12:49:57 -0700 Subject: [PATCH] Avoid aliasing in fsnode by forcing copies for file contents and add a test --- kyaml/filesys/fsnode.go | 4 ++-- kyaml/filesys/fsnode_test.go | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/kyaml/filesys/fsnode.go b/kyaml/filesys/fsnode.go index fbede9ed7..58bfe72bd 100644 --- a/kyaml/filesys/fsnode.go +++ b/kyaml/filesys/fsnode.go @@ -123,11 +123,11 @@ func (n *fsNode) addFile(name string, c []byte) (result *fsNode, err error) { if result.offset != nil { return nil, fmt.Errorf("cannot add already opened file '%s'", n.Path()) } - result.content = c + result.content = append(result.content[:0], c...) return result, nil } result = &fsNode{ - content: c, + content: append([]byte(nil), c...), parent: parent, } parent.dir[fileName] = result diff --git a/kyaml/filesys/fsnode_test.go b/kyaml/filesys/fsnode_test.go index 019a220df..00b0c2ca6 100644 --- a/kyaml/filesys/fsnode_test.go +++ b/kyaml/filesys/fsnode_test.go @@ -157,9 +157,13 @@ func runBasicOperations( if string(stuff) != both { t.Fatalf("%s; unexpected content '%s', expected '%s'", c.what, stuff, both) } - if err := fSys.WriteFile(c.path, []byte(shortContent)); err != nil { + + content := []byte(shortContent) + if err := fSys.WriteFile(c.path, content); err != nil { t.Fatalf("%s; unexpected error: %v", c.what, err) } + // This ensures that modifying the original slice does not change the contents of the file. + content[0] = '@' stuff, err = fSys.ReadFile(c.path) if err != nil { t.Fatalf("%s; unexpected error: %v", c.what, err)