summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--file.c5
-rw-r--r--test/ruby/test_path.rb9
3 files changed, 18 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 9c56a36b91..5fa0e44c81 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Oct 26 15:24:25 2011 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (rb_file_join): honor input encodings than ASCII-8BIT.
+ [ruby-core:40338] [Bug #5483]
+
Tue Oct 25 21:52:31 2011 Tanaka Akira <akr@fsij.org>
* include/ruby/defines.h: use "__sparc" instead of "sparc" and
diff --git a/file.c b/file.c
index bd96ffee35..3107895037 100644
--- a/file.c
+++ b/file.c
@@ -3847,7 +3847,10 @@ rb_file_join(VALUE ary, VALUE sep)
FilePathStringValue(tmp);
}
name = StringValueCStr(result);
- if (i > 0 && !NIL_P(sep)) {
+ if (i == 0) {
+ rb_enc_copy(result, tmp);
+ }
+ else if (!NIL_P(sep)) {
tail = chompdirsep(name);
if (RSTRING_PTR(tmp) && isdirsep(RSTRING_PTR(tmp)[0])) {
rb_str_set_len(result, tail - name);
diff --git a/test/ruby/test_path.rb b/test/ruby/test_path.rb
index 74d568ae49..2db7be0b76 100644
--- a/test/ruby/test_path.rb
+++ b/test/ruby/test_path.rb
@@ -247,4 +247,13 @@ class TestPath < Test::Unit::TestCase
assert_raise(Encoding::CompatibilityError) {open(s.encode("utf-32be"))}
assert_raise(Encoding::CompatibilityError) {open(s.encode("utf-32le"))}
end
+
+ def test_join
+ bug5483 = '[ruby-core:40338]'
+ path = %w[a b]
+ Encoding.list.each do |e|
+ next unless e.ascii_compatible?
+ assert_equal(e, File.join(*path.map {|s| s.force_encoding(e)}).encoding, bug5483)
+ end
+ end
end