From 7eafeaa31328b4074761f4b33dc2b89946fb0617 Mon Sep 17 00:00:00 2001 From: charliesome Date: Thu, 5 Sep 2013 09:07:48 +0000 Subject: * string.c (fstring_cmp): take string encoding into account when comparing fstrings [ruby-core:57037] [Bug #8866] * test/ruby/test_string.rb: add test git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42847 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index c1366e834e..af03bc72db 100644 --- a/string.c +++ b/string.c @@ -131,11 +131,13 @@ VALUE rb_cSymbol; #define STR_ENC_GET(str) rb_enc_from_index(ENCODING_GET(str)) +static int fstring_cmp(VALUE a, VALUE b); + static st_table* frozen_strings; static const struct st_hash_type fstring_hash_type = { - rb_str_cmp, - rb_str_hash + fstring_cmp, + rb_str_hash, }; VALUE @@ -153,6 +155,16 @@ rb_fstring(VALUE str) return str; } +static int +fstring_cmp(VALUE a, VALUE b) +{ + int cmp = rb_str_hash_cmp(a, b); + if (cmp != 0) { + return cmp; + } + return ENCODING_GET(b) - ENCODING_GET(a); +} + static inline int single_byte_optimizable(VALUE str) { -- cgit v1.2.3