Stir the hash value more with encoding index

This commit is contained in:
Nobuyoshi Nakada 2023-12-17 00:30:00 +09:00
parent 2f595c744e
commit ab7f54688b
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
2 changed files with 6 additions and 3 deletions

View File

@ -3586,11 +3586,12 @@ rb_str_prepend_multi(int argc, VALUE *argv, VALUE str)
st_index_t
rb_str_hash(VALUE str)
{
st_index_t h = rb_memhash((const void *)RSTRING_PTR(str), RSTRING_LEN(str));
int e = RSTRING_LEN(str) ? ENCODING_GET(str) : 0;
if (e && is_ascii_string(str)) {
e = 0;
if (e && !is_ascii_string(str)) {
h = rb_hash_end(rb_hash_uint32(h, (uint32_t)e));
}
return rb_memhash((const void *)RSTRING_PTR(str), RSTRING_LEN(str)) ^ e;
return h;
}
int

View File

@ -1345,6 +1345,8 @@ CODE
bug9172 = '[ruby-core:58658] [Bug #9172]'
assert_not_equal(S("sub-setter").hash, S("discover").hash, bug9172)
assert_equal(S("").hash, S("".encode(Encoding::UTF_32BE)).hash)
h1, h2 = ["\x80", "\x81"].map {|c| c.b.hash ^ c.hash}
assert_not_equal(h1, h2)
end
def test_hex