[ubsan] Fix UB in StringHasher::GetTrivialHash()

... which broke with 32-bit Smis.

Tbr: verwaest@chromium.org
No-Tree-Checks: true
Bug: v8:9767
Change-Id: I459a5d807d87012ab72138f46b49362f16b6baa1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1862562
Reviewed-by: Igor Sheludko <ishell@chromium.org>
Reviewed-by: Sathya Gunasekaran  <gsathya@chromium.org>
Commit-Queue: Igor Sheludko <ishell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#64289}
This commit is contained in:
Igor Sheludko 2019-10-15 13:06:18 +02:00 committed by Commit Bot
parent 1ec2ca266f
commit 145a8f4416

View File

@ -34,8 +34,8 @@ uint32_t StringHasher::GetHashCore(uint32_t running_hash) {
uint32_t StringHasher::GetTrivialHash(int length) {
DCHECK_GT(length, String::kMaxHashCalcLength);
// String hash of a large string is simply the length.
return (length << String::kHashShift) | String::kIsNotArrayIndexMask |
String::kIsNotIntegerIndexMask;
return (static_cast<uint32_t>(length) << String::kHashShift) |
String::kIsNotArrayIndexMask | String::kIsNotIntegerIndexMask;
}
template <typename schar>