symbol.c: not freeze the receiver

* symbol.c (rb_str_intern): should not freeze the receiver itself
  unexpectedly.  [ruby-core:71611] [Bug #11721]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2015-11-20 19:34:19 +00:00
Родитель 8594cab140
Коммит c815f7e7cf
3 изменённых файлов: 21 добавлений и 7 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Sat Nov 21 04:34:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* symbol.c (rb_str_intern): should not freeze the receiver itself
unexpectedly. [ruby-core:71611] [Bug #11721]
Fri Nov 20 23:15:18 2015 Naotoshi Seo <sonots@gmail.com>
* lib/logger.rb: expose logger mutex

Просмотреть файл

@ -674,13 +674,14 @@ rb_str_intern(VALUE str)
#if USE_SYMBOL_GC
enc = rb_enc_get(str);
ascii = rb_usascii_encoding();
if (enc != ascii) {
if (sym_check_asciionly(str)) {
str = rb_str_dup(str);
rb_enc_associate(str, ascii);
OBJ_FREEZE(str);
enc = ascii;
}
if (enc != ascii && sym_check_asciionly(str)) {
str = rb_str_dup(str);
rb_enc_associate(str, ascii);
OBJ_FREEZE(str);
enc = ascii;
}
else {
str = rb_str_new_frozen(str);
}
str = rb_fstring(str);
type = rb_str_symname_type(str, IDSET_ATTRSET_FOR_INTERN);

Просмотреть файл

@ -336,4 +336,12 @@ class TestSymbol < Test::Unit::TestCase
}
end;
end
def test_not_freeze
bug11721 = '[ruby-core:71611] [Bug #11721]'
str = "\u{1f363}".taint
assert_not_predicate(str, :frozen?)
assert_equal str, str.to_sym.to_s
assert_not_predicate(str, :frozen?, bug11721)
end
end