diff --git i/array.c w/array.c index ce36e19..56adacf 100644 --- i/array.c +++ w/array.c @@ -1730,8 +1730,8 @@ rb_ary_join(VALUE ary, VALUE sep) VALUE val, tmp, result; if (RARRAY_LEN(ary) == 0) return rb_usascii_str_new(0, 0); - if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = TRUE; - if (OBJ_UNTRUSTED(ary) || OBJ_UNTRUSTED(sep)) untrust = TRUE; + if (OBJ_TAINTED(ary)) taint = TRUE; + if (OBJ_UNTRUSTED(ary)) untrust = TRUE; if (!NIL_P(sep)) { StringValue(sep); diff --git i/test/ruby/test_array.rb w/test/ruby/test_array.rb index 28d3e41..801411e 100644 --- i/test/ruby/test_array.rb +++ w/test/ruby/test_array.rb @@ -920,6 +920,19 @@ class TestArray < Test::Unit::TestCase assert_equal(true, s.tainted?) assert_equal(true, s.untrusted?) + bug5902 = '[ruby-core:42161]' + sep = ":".taint.untrust + + s = @cls[].join(sep) + assert_equal(false, s.tainted?, bug5902) + assert_equal(false, s.untrusted?, bug5902) + s = @cls[1].join(sep) + assert_equal(false, s.tainted?, bug5902) + assert_equal(false, s.untrusted?, bug5902) + s = @cls[1, 2].join(sep) + assert_equal(true, s.tainted?, bug5902) + assert_equal(true, s.untrusted?, bug5902) + e = ''.force_encoding('EUC-JP') u = ''.force_encoding('UTF-8') assert_equal(Encoding::US_ASCII, [[]].join.encoding)