Bug #11386 » 0003-string.c-bare-string-fstring.patch
string.c | ||
---|---|---|
return ST_STOP;
|
||
}
|
||
else {
|
||
if (STR_SHARED_P(str)) { /* str should not be shared */
|
||
if (STR_SHARED_P(str) || /* str should not be shared */
|
||
FL_TEST_RAW(str, FL_EXIVAR) || /* no instance variables */
|
||
(RBASIC_CLASS(str) && RBASIC_CLASS(str) != rb_cString)) { /* no singleton */
|
||
const int taint = RBASIC(str)->flags & FL_TAINT;
|
||
str = rb_enc_str_new(RSTRING_PTR(str), RSTRING_LEN(str), STR_ENC_GET(str));
|
||
RBASIC(str)->flags |= FL_FREEZE | taint;
|
test/-ext-/string/test_fstring.rb | ||
---|---|---|
assert_predicate(str, :tainted?)
|
||
assert_predicate(fstr, :tainted?)
|
||
end
|
||
def test_instance_variable
|
||
str = __method__.to_s.capitalize
|
||
str.instance_variable_set(:@test, 42)
|
||
str.freeze
|
||
fstr = Bug::String.fstring(str)
|
||
assert_send([str, :instance_variable_defined?, :@test])
|
||
assert_not_send([fstr, :instance_variable_defined?, :@test])
|
||
end
|
||
def test_singleton_method
|
||
str = __method__.to_s.capitalize
|
||
def str.foo
|
||
end
|
||
str.freeze
|
||
fstr = Bug::String.fstring(str)
|
||
assert_send([str, :respond_to?, :foo])
|
||
assert_not_send([fstr, :respond_to?, :foo])
|
||
end
|
||
class S < String
|
||
end
|
||
def test_subclass
|
||
str = S.new(__method__.to_s.capitalize)
|
||
str.freeze
|
||
fstr = Bug::String.fstring(str)
|
||
assert_instance_of(S, str)
|
||
assert_instance_of(String, fstr)
|
||
end
|
||
end
|
- « Previous
- 1
- 2
- 3
- Next »