summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--array.c9
-rw-r--r--test/ruby/test_array.rb1
2 files changed, 5 insertions, 5 deletions
diff --git a/array.c b/array.c
index ecf1fed5c1..f8faf697bf 100644
--- a/array.c
+++ b/array.c
@@ -1994,7 +1994,10 @@ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
if (RB_TYPE_P(val, T_STRING)) {
str_join:
rb_str_buf_append(result, val);
- *first = FALSE;
+ if (*first) {
+ rb_enc_copy(result, val);
+ *first = FALSE;
+ }
}
else if (RB_TYPE_P(val, T_ARRAY)) {
obj = val;
@@ -2025,10 +2028,6 @@ ary_join_1(VALUE obj, VALUE ary, VALUE sep, long i, VALUE result, int *first)
goto ary_join;
}
val = rb_obj_as_string(val);
- if (*first) {
- rb_enc_copy(result, val);
- *first = FALSE;
- }
goto str_join;
}
}
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb
index 5bd4517f2e..e7e654d181 100644
--- a/test/ruby/test_array.rb
+++ b/test/ruby/test_array.rb
@@ -1085,6 +1085,7 @@ class TestArray < Test::Unit::TestCase
assert_equal(Encoding::US_ASCII, [1, [u]].join.encoding)
assert_equal(Encoding::UTF_8, [u, [e]].join.encoding)
assert_equal(Encoding::UTF_8, [u, [1]].join.encoding)
+ assert_equal(Encoding::UTF_8, [Struct.new(:to_str).new(u)].join.encoding)
bug5379 = '[ruby-core:39776]'
assert_equal(Encoding::US_ASCII, [[], u, nil].join.encoding, bug5379)
assert_equal(Encoding::UTF_8, [[], "\u3042", nil].join.encoding, bug5379)