Index: base/hash.h |
diff --git a/base/hash.h b/base/hash.h |
index cf8ea3a26e49475a9187d7005cc17b0f470609f6..0b9c9f6bf0cf272d712d4de2458d215daa1808bb 100644 |
--- a/base/hash.h |
+++ b/base/hash.h |
@@ -5,25 +5,33 @@ |
#ifndef BASE_HASH_H_ |
#define BASE_HASH_H_ |
+#include <limits> |
#include <string> |
#include "base/base_export.h" |
#include "base/basictypes.h" |
+#include "base/logging.h" |
namespace base { |
-// From http://www.azillionmonkeys.com/qed/hash.html |
-// This is the hash used on WebCore/platform/stringhash |
Noel Gordon
2014/03/04 08:39:52
Late to this party, but why did the reference to t
Matt Giuca
2014/03/04 23:47:31
Ah, is that where it is. I did a brief search for
|
-BASE_EXPORT uint32 SuperFastHash(const char * data, int len); |
+// WARNING: This hash function should not be used for any cryptographic purpose. |
+BASE_EXPORT uint32 SuperFastHash(const char* data, int len); |
+// Computes the hash of a string |key| of a given |length|. |key| does not need |
Noel Gordon
2014/03/04 08:39:52
"hash of a string"? |key| does not appear to be a
Matt Giuca
2014/03/04 23:47:31
Yeah, all correct. I was just trying to be quite c
|
+// to be null-terminated, and may contain null bytes. |
+// WARNING: This hash function should not be used for any cryptographic purpose. |
inline uint32 Hash(const char* key, size_t length) { |
+ if (length > static_cast<size_t>(std::numeric_limits<int>::max())) { |
+ NOTREACHED(); |
+ return 0; |
+ } |
return SuperFastHash(key, static_cast<int>(length)); |
} |
+// Computes the hash of a string |key|. |
+// WARNING: This hash function should not be used for any cryptographic purpose. |
inline uint32 Hash(const std::string& key) { |
- if (key.empty()) |
- return 0; |
- return SuperFastHash(key.data(), static_cast<int>(key.size())); |
+ return Hash(key.data(), key.size()); |
} |
} // namespace base |