util/deephash: disambiguate hashing of AppendTo (#2483)

Prepend size to AppendTo output.

Fixes #2443

Signed-off-by: Joe Tsai <joetsai@digital-static.net>
This commit is contained in:
Joe Tsai
2021-07-21 11:29:08 -07:00
committed by GitHub
parent 23ad028414
commit d666bd8533
2 changed files with 12 additions and 2 deletions

View File

@@ -147,8 +147,10 @@ func (h *hasher) print(v reflect.Value) (acyclic bool) {
// Use AppendTo methods, if available and cheap.
if v.CanAddr() && v.Type().Implements(appenderToType) {
a := v.Addr().Interface().(appenderTo)
scratch := a.AppendTo(h.scratch[:0])
w.Write(scratch)
size := h.scratch[:8]
record := a.AppendTo(size)
binary.LittleEndian.PutUint64(record, uint64(len(record)-len(size)))
w.Write(record)
return true
}
}