Stir the hash value more with encoding index
This commit is contained in:
parent
2f595c744e
commit
ab7f54688b
7
string.c
7
string.c
@ -3586,11 +3586,12 @@ rb_str_prepend_multi(int argc, VALUE *argv, VALUE str)
|
|||||||
st_index_t
|
st_index_t
|
||||||
rb_str_hash(VALUE str)
|
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;
|
int e = RSTRING_LEN(str) ? ENCODING_GET(str) : 0;
|
||||||
if (e && is_ascii_string(str)) {
|
if (e && !is_ascii_string(str)) {
|
||||||
e = 0;
|
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
|
int
|
||||||
|
@ -1345,6 +1345,8 @@ CODE
|
|||||||
bug9172 = '[ruby-core:58658] [Bug #9172]'
|
bug9172 = '[ruby-core:58658] [Bug #9172]'
|
||||||
assert_not_equal(S("sub-setter").hash, S("discover").hash, bug9172)
|
assert_not_equal(S("sub-setter").hash, S("discover").hash, bug9172)
|
||||||
assert_equal(S("").hash, S("".encode(Encoding::UTF_32BE)).hash)
|
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
|
end
|
||||||
|
|
||||||
def test_hex
|
def test_hex
|
||||||
|
Loading…
x
Reference in New Issue
Block a user