[ruby-core:82103] Re: register_fstring_tainted:FL_TEST_RAW(str, RSTRING_FSTR)

From: Eric Wong <normalperson@...>
Date: 2017-07-18 23:33:36 UTC
List: ruby-core #82103
Eric Wong <normalperson@yhbt.net> wrote:
> Koichi Sasada <ko1@atdot.net> wrote:
> > so many errors..
> > http://ci.rvm.jp/
> > http://rubyci.org/
> > 
> > On 2017/07/18 20:43, Koichi Sasada wrote:
> > >I got it.
> > >
> > >https://gist.github.com/anonymous/b22263dd722b5c057c0f8052790f3cb3#file-brlog-trunk-20170718-202820-L379
> > >
> > >
> > >I, [2017-07-18T20:29:09.062035 #16825] INFO -- : Assertion Failed: /home/ko1/ruby/src/trunk/string.c:346:register_fstring_tainted:FL_TEST_RAW(str,
> > >RSTRING_FSTR)

Testing following patch (slow computer), I think the return I added to the test
was hiding it, but I could not reproduce the bug on a pristine
r59362 at all even with:

	make DEFS="-DRGENGC_CHECK_MODE=2 -DVM_CHECK_MODE=2"

diff --git a/string.c b/string.c
index 932ed5e85f..4a17fc1980 100644
--- a/string.c
+++ b/string.c
@@ -1415,8 +1415,15 @@ rb_str_free(VALUE str)
 {
     if (FL_TEST(str, RSTRING_FSTR)) {
 	st_data_t fstr = (st_data_t)str;
-	st_delete(rb_vm_fstring_table(), &fstr, NULL);
-	st_delete(rb_vm_tfstring_table(), &fstr, NULL);
+	if (FL_TEST_RAW(str, FL_TAINT)) {
+	    st_delete(rb_vm_tfstring_table(), &fstr, NULL);
+	}
+	else {
+	    st_delete(rb_vm_fstring_table(), &fstr, NULL);
+	    if (!STR_EMBED_P(str)) {
+		st_delete(rb_vm_tfstring_table(), &fstr, NULL);
+	    }
+	}
 	RB_DEBUG_COUNTER_INC(obj_str_fstr);
     }
 
diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb
index e68a3078eb..eb3d3133d2 100644
--- a/test/ruby/test_string.rb
+++ b/test/ruby/test_string.rb
@@ -2750,7 +2750,6 @@ def test_uplus_minus
     assert_not_same(str, +str)
     assert_same(str, -str)
 
-    return unless @cls == String
     bar = %w(b a r).join('')
     assert_not_predicate bar, :tainted?
     assert_not_predicate str, :tainted?

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread