1
0
Fork 0
mirror of https://github.com/vbatts/go-mtree.git synced 2024-11-25 17:45:39 +00:00

check: creator.curSet pointer aliasing

When iterating over creator.DH.Entries using the variable
e, and then setting creator.curSet to &e, this causes aliasing
that results in the underlying Entry of creator.curSet to
change on each iteration. Instead we want to get the address of
the actual Entry in creator.DH.Entries.

Signed-off-by: Stephen Chung <schung@redhat.com>
This commit is contained in:
Stephen Chung 2016-07-15 08:58:26 -04:00
parent a29236e678
commit c99862ee53
2 changed files with 6 additions and 3 deletions

View file

@ -41,11 +41,11 @@ func Check(root string, dh *DirectoryHierarchy, keywords []string) (*Result, err
sort.Sort(byPos(creator.DH.Entries))
var result Result
for _, e := range creator.DH.Entries {
for i, e := range creator.DH.Entries {
switch e.Type {
case SpecialType:
if e.Name == "/set" {
creator.curSet = &e
creator.curSet = &creator.DH.Entries[i]
} else if e.Name == "/unset" {
creator.curSet = nil
}

View file

@ -108,7 +108,7 @@ func TestTimeComparison(t *testing.T) {
// This is the format of time from FreeBSD
spec := `
/set type=file time=5.000000000
. type=dir
. type=dir
file time=5.000000000
..
`
@ -122,6 +122,9 @@ func TestTimeComparison(t *testing.T) {
if err := os.Chtimes(fh.Name(), epoch, epoch); err != nil {
t.Fatal(err)
}
if err := os.Chtimes(dir, epoch, epoch); err != nil {
t.Fatal(err)
}
if err := fh.Close(); err != nil {
t.Error(err)
}