summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-29 05:44:33 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-10-29 05:44:33 +0000
commitef276e959ec8a8ad0b7683176e2943058335f55c (patch)
tree1ceb41f82080f9a49fa59b95c9904dff235c1429
parent5de3e7e2bdce598dfc7348fbe3ef8ee951058d1d (diff)
load.c: transcode path
* load.c (rb_f_load): path name needs to be transcoded to OS path encoding. [ruby-list:49994] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48186 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--load.c8
-rw-r--r--test/ruby/test_require.rb22
3 files changed, 32 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c5a72d19af..a2c8f5bd0e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Oct 29 14:44:27 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * load.c (rb_f_load): path name needs to be transcoded to OS path
+ encoding. [ruby-list:49994]
+
Wed Oct 29 11:48:23 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (__builtin_setjmp): disable with gcc/clang earlier
diff --git a/load.c b/load.c
index 3f5372c064..e6a7be4a67 100644
--- a/load.c
+++ b/load.c
@@ -683,7 +683,7 @@ rb_load_protect(VALUE fname, int wrap, int *state)
static VALUE
rb_f_load(int argc, VALUE *argv)
{
- VALUE fname, wrap, path;
+ VALUE fname, wrap, path, orig_fname;
rb_scan_args(argc, argv, "11", &fname, &wrap);
@@ -693,10 +693,12 @@ rb_f_load(int argc, VALUE *argv)
rb_sourceline());
}
- path = rb_find_file(FilePathValue(fname));
+ orig_fname = FilePathValue(fname);
+ fname = rb_str_encode_ospath(orig_fname);
+ path = rb_find_file(fname);
if (!path) {
if (!rb_file_load_ok(RSTRING_PTR(fname)))
- load_failed(fname);
+ load_failed(orig_fname);
path = fname;
}
rb_load_internal(path, RTEST(wrap));
diff --git a/test/ruby/test_require.rb b/test/ruby/test_require.rb
index 5b299f4228..971140afff 100644
--- a/test/ruby/test_require.rb
+++ b/test/ruby/test_require.rb
@@ -308,6 +308,28 @@ class TestRequire < Test::Unit::TestCase
}
end
+ def test_load_ospath
+ bug = '[ruby-list:49994] path in ospath'
+ base = "test_load\u{3042 3044 3046 3048 304a}".encode(Encoding::Windows_31J)
+ path = nil
+ Tempfile.create([base, ".rb"]) do |t|
+ path = t.path
+
+ assert_raise_with_message(LoadError, /#{base}/) {
+ load(File.join(File.dirname(path), base))
+ }
+
+ t.puts "warn 'ok'"
+ t.close
+ assert_include(path, base)
+ assert_warn("ok\n", bug) {
+ assert_nothing_raised(LoadError, bug) {
+ load(path)
+ }
+ }
+ end
+ end
+
def test_tainted_loadpath
Tempfile.create(["test_ruby_test_require", ".rb"]) {|t|
abs_dir, file = File.split(t.path)