зеркало из https://github.com/github/ruby.git
* load.c (features_index_add): use rb_str_subseq() to specify C string
position properly to fix require non ascii path. [ruby-core:53733] [Bug #8165] * test/ruby/test_require.rb (TestRequire#test_require_nonascii_path): a test for the above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
21d47b7381
Коммит
07636ed42e
|
@ -1,3 +1,12 @@
|
|||
Sat Apr 6 00:19:30 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
|
||||
|
||||
* load.c (features_index_add): use rb_str_subseq() to specify C string
|
||||
position properly to fix require non ascii path.
|
||||
[ruby-core:53733] [Bug #8165]
|
||||
|
||||
* test/ruby/test_require.rb (TestRequire#test_require_nonascii_path):
|
||||
a test for the above.
|
||||
|
||||
Fri Apr 5 20:41:49 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* include/ruby/defines.h (HAVE_TRUE_LONG_LONG): Defined to distinguish
|
||||
|
|
6
load.c
6
load.c
|
@ -247,16 +247,16 @@ features_index_add(VALUE feature, VALUE offset)
|
|||
if (p < feature_str)
|
||||
break;
|
||||
/* Now *p == '/'. We reach this point for every '/' in `feature`. */
|
||||
short_feature = rb_str_substr(feature, p + 1 - feature_str, feature_end - p - 1);
|
||||
short_feature = rb_str_subseq(feature, p + 1 - feature_str, feature_end - p - 1);
|
||||
features_index_add_single(short_feature, offset);
|
||||
if (ext) {
|
||||
short_feature = rb_str_substr(feature, p + 1 - feature_str, ext - p - 1);
|
||||
short_feature = rb_str_subseq(feature, p + 1 - feature_str, ext - p - 1);
|
||||
features_index_add_single(short_feature, offset);
|
||||
}
|
||||
}
|
||||
features_index_add_single(feature, offset);
|
||||
if (ext) {
|
||||
short_feature = rb_str_substr(feature, 0, ext - feature_str);
|
||||
short_feature = rb_str_subseq(feature, 0, ext - feature_str);
|
||||
features_index_add_single(short_feature, offset);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,6 +59,27 @@ class TestRequire < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_require_nonascii_path
|
||||
bug8165 = '[ruby-core:53733] [Bug #8165]'
|
||||
Dir.mktmpdir {|tmp|
|
||||
encoding = /mswin|mingw/ =~ RUBY_PLATFORM ? 'filesystem' : 'UTF-8'
|
||||
dir = "\u3042" * 5
|
||||
begin
|
||||
require_path = File.join(tmp, dir, 'foo.rb').encode(encoding)
|
||||
rescue
|
||||
skip "cannot convert path encoding to #{encoding}"
|
||||
end
|
||||
Dir.mkdir(File.dirname(require_path))
|
||||
open(require_path, "wb") {}
|
||||
assert_in_out_err([], <<-INPUT, %w(:ok), [], bug8165)
|
||||
# coding: #{encoding}
|
||||
$:.replace([IO::NULL] + $:.reject {|path| path !~ /\.ext/})
|
||||
p :ok if require '#{require_path}'
|
||||
p :ng if require '#{require_path}'
|
||||
INPUT
|
||||
}
|
||||
end
|
||||
|
||||
def test_require_path_home_1
|
||||
env_rubypath, env_home = ENV["RUBYPATH"], ENV["HOME"]
|
||||
pathname_too_long = /pathname too long \(ignored\).*\(LoadError\)/m
|
||||
|
|
Загрузка…
Ссылка в новой задаче