From 36ea837736a07ad3a0ab8fe5735be124aa200202 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 16 Jun 2022 11:24:04 -0700 Subject: [PATCH] util/deephash: fix map hashing to actually hash elements Fixes #4868 Change-Id: I574fd139cb7f7033dd93527344e6aa0e625477c7 Signed-off-by: Brad Fitzpatrick --- util/deephash/deephash.go | 2 +- util/deephash/deephash_test.go | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/util/deephash/deephash.go b/util/deephash/deephash.go index 23d910172..955f83e55 100644 --- a/util/deephash/deephash.go +++ b/util/deephash/deephash.go @@ -342,7 +342,7 @@ func (h *hasher) hashMap(v reflect.Value) { e.SetIterValue(iter) mh.h.reset() mh.h.hashValue(k) - mh.h.hashValue(v) + mh.h.hashValue(e) sum.xor(mh.h.sum()) } h.bw.Write(append(h.scratch[:0], sum.sum[:]...)) // append into scratch to avoid heap allocation diff --git a/util/deephash/deephash_test.go b/util/deephash/deephash_test.go index bccebba62..3650beade 100644 --- a/util/deephash/deephash_test.go +++ b/util/deephash/deephash_test.go @@ -132,6 +132,15 @@ func TestDeepHash(t *testing.T) { } } +// Tests that we actually hash map elements. Whoops. +func TestIssue4868(t *testing.T) { + m1 := map[int]string{1: "foo"} + m2 := map[int]string{1: "bar"} + if Hash(m1) == Hash(m2) { + t.Error("bogus") + } +} + func getVal() []any { return []any{ &wgcfg.Config{