From: Wei Xu Date: Tue, 9 Oct 2012 04:39:44 +0000 (-0700) Subject: Fix fbstring hash X-Git-Tag: v0.22.0~1172 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=057837098c41af5345cb91b7591846ab7df4e2c1;p=folly.git Fix fbstring hash Summary: '\0' may actually be part of string. We cannot assume its null terminated and should use another form of fnv32. Test Plan: FBStringTest Reviewed By: xliux@fb.com FB internal diff: D595287 --- diff --git a/folly/FBString.h b/folly/FBString.h index 9ac8918c..1c8ec1d3 100644 --- a/folly/FBString.h +++ b/folly/FBString.h @@ -2304,7 +2304,7 @@ namespace std { template <> struct hash< ::folly::fbstring> { size_t operator()(const ::folly::fbstring& s) const { - return ::folly::hash::fnv32(s.c_str()); + return ::folly::hash::fnv32_buf(s.data(), s.size()); } }; } diff --git a/folly/test/FBStringTest.cpp b/folly/test/FBStringTest.cpp index 428bed28..0e6e57f1 100644 --- a/folly/test/FBStringTest.cpp +++ b/folly/test/FBStringTest.cpp @@ -995,6 +995,18 @@ TEST(FBString, testFixedBugs) { } } + +TEST(FBString, testHash) { + fbstring a; + fbstring b; + a.push_back(0); + a.push_back(1); + b.push_back(0); + b.push_back(2); + std::hash hashfunc; + EXPECT_NE(hashfunc(a), hashfunc(b)); +} + int main(int argc, char** argv) { testing::InitGoogleTest(&argc, argv); google::ParseCommandLineFlags(&argc, &argv, true);