From 75b4cfeb994185815b8efcc14ed9be4cf5bfdd25 Mon Sep 17 00:00:00 2001 From: "yusuke.koyoshi" Date: Tue, 3 Dec 2024 16:07:04 +0900 Subject: [PATCH 1/2] Fix index out of range --- unique_string.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/unique_string.go b/unique_string.go index d0a4768..aa7236d 100644 --- a/unique_string.go +++ b/unique_string.go @@ -53,8 +53,7 @@ func murmurHash64(data []byte) uint64 { o := size - i if o > 0 { - h1 := uint32(uint32(data[i]) | (uint32(data[i+1]) << 8) | (uint32(data[i+2]) << 16) | (uint32(data[i+3]) << 24)) - + var h1 uint32 = 0 if o < 4 { switch o { case 2: @@ -64,6 +63,8 @@ func murmurHash64(data []byte) uint64 { default: h1 = uint32(data[i]) } + } else { + h1 = uint32(uint32(data[i]) | (uint32(data[i+1]) << 8) | (uint32(data[i+2]) << 16) | (uint32(data[i+3]) << 24)) } h1 *= uint32(c4) From 583306e1d75c728799119793ff16b6e5aa387247 Mon Sep 17 00:00:00 2001 From: "yusuke.koyoshi" Date: Tue, 3 Dec 2024 16:07:13 +0900 Subject: [PATCH 2/2] Add tests --- unique_string_test.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/unique_string_test.go b/unique_string_test.go index 186e352..a369f9f 100644 --- a/unique_string_test.go +++ b/unique_string_test.go @@ -27,6 +27,25 @@ func TestGenerateUniqueString(t *testing.T) { } } +func TestGenerateUniqueString_shortString(t *testing.T) { + prev := GenerateUniqueString("t") + if prev != "fsnwonksnm7cy" { + t.Fatalf("GenerateUniqueString(\"t\") should = fsnwonksnm7cy") + } + prev = GenerateUniqueString("te") + if prev != "o57ehhbytctgs" { + t.Fatalf("GenerateUniqueString(\"te\") should = o57ehhbytctgs") + } + prev = GenerateUniqueString("tes") + if prev != "ebse57jls4qbc" { + t.Fatalf("GenerateUniqueString(\"tes\") should = ebse57jls4qbc") + } + prev = GenerateUniqueString("t", "e") + if prev != "d5ykh7yoidm2a" { + t.Fatalf("GenerateUniqueString(\"t\", \"e\") should = d5ykh7yoidm2a") + } +} + func BenchmarkGenerateUniqueString(b *testing.B) { for n := 0; n < b.N; n++ { _ = GenerateUniqueString("test")