* dir.c (GlobPathValue), file.c (rb_get_path_check): path names
must be ASCII compatible. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
bdde51172c
commit
a1485dbea0
@ -1,3 +1,8 @@
|
|||||||
|
Sat Sep 19 17:32:59 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* dir.c (GlobPathValue), file.c (rb_get_path_check): path names
|
||||||
|
must be ASCII compatible.
|
||||||
|
|
||||||
Sat Sep 19 00:02:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat Sep 19 00:02:19 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* include/ruby/ruby.h (rb_type): forward declaration to suppress a
|
* include/ruby/ruby.h (rb_type): forward declaration to suppress a
|
||||||
|
5
dir.c
5
dir.c
@ -343,7 +343,10 @@ static VALUE dir_close(VALUE);
|
|||||||
/* can contain null bytes as separators */ \
|
/* can contain null bytes as separators */ \
|
||||||
(!RB_TYPE_P(str, T_STRING) ? \
|
(!RB_TYPE_P(str, T_STRING) ? \
|
||||||
FilePathValue(str) : \
|
FilePathValue(str) : \
|
||||||
(safe) ? (rb_check_safe_obj(str), (str)) : (str))
|
(check_safe_glob(str, safe), \
|
||||||
|
check_glob_encoding(str), (str)))
|
||||||
|
#define check_safe_glob(str, safe) ((safe) ? rb_check_safe_obj(str) : (void)0)
|
||||||
|
#define check_glob_encoding(str) rb_enc_check((str), rb_enc_from_encoding(rb_usascii_encoding()))
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
dir_s_alloc(VALUE klass)
|
dir_s_alloc(VALUE klass)
|
||||||
|
1
file.c
1
file.c
@ -127,6 +127,7 @@ rb_get_path_check(VALUE obj, int level)
|
|||||||
if (obj != tmp && insecure_obj_p(tmp, level)) {
|
if (obj != tmp && insecure_obj_p(tmp, level)) {
|
||||||
rb_insecure_operation();
|
rb_insecure_operation();
|
||||||
}
|
}
|
||||||
|
rb_enc_check(tmp, rb_enc_from_encoding(rb_usascii_encoding()));
|
||||||
return rb_str_new4(tmp);
|
return rb_str_new4(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +161,11 @@ class TestDir < Test::Unit::TestCase
|
|||||||
Dir.glob(File.join(@root, '{\{\},a}')))
|
Dir.glob(File.join(@root, '{\{\},a}')))
|
||||||
assert_equal([], Dir.glob(File.join(@root, '[')))
|
assert_equal([], Dir.glob(File.join(@root, '[')))
|
||||||
assert_equal([], Dir.glob(File.join(@root, '[a-\\')))
|
assert_equal([], Dir.glob(File.join(@root, '[a-\\')))
|
||||||
|
|
||||||
|
d = "\u{3042}\u{3044}".encode("utf-16le")
|
||||||
|
assert_raise(Encoding::CompatibilityError) {Dir.glob(d)}
|
||||||
|
m = Class.new {define_method(:to_path) {d}}
|
||||||
|
assert_raise(Encoding::CompatibilityError) {Dir.glob(m.new)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_foreach
|
def test_foreach
|
||||||
|
@ -3,6 +3,13 @@ require "fileutils"
|
|||||||
require "tmpdir"
|
require "tmpdir"
|
||||||
|
|
||||||
class TestFileExhaustive < Test::Unit::TestCase
|
class TestFileExhaustive < Test::Unit::TestCase
|
||||||
|
def assert_incompatible_encoding
|
||||||
|
d = "\u{3042}\u{3044}".encode("utf-16le")
|
||||||
|
assert_raise(Encoding::CompatibilityError) {yield d}
|
||||||
|
m = Class.new {define_method(:to_path) {d}}
|
||||||
|
assert_raise(Encoding::CompatibilityError) {yield m.new}
|
||||||
|
end
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@dir = Dir.mktmpdir("rubytest-file")
|
@dir = Dir.mktmpdir("rubytest-file")
|
||||||
File.chown(-1, Process.gid, @dir)
|
File.chown(-1, Process.gid, @dir)
|
||||||
@ -388,6 +395,8 @@ class TestFileExhaustive < Test::Unit::TestCase
|
|||||||
assert_kind_of(String, File.expand_path("~"))
|
assert_kind_of(String, File.expand_path("~"))
|
||||||
assert_raise(ArgumentError) { File.expand_path("~foo_bar_baz_unknown_user_wahaha") }
|
assert_raise(ArgumentError) { File.expand_path("~foo_bar_baz_unknown_user_wahaha") }
|
||||||
assert_raise(ArgumentError) { File.expand_path("~foo_bar_baz_unknown_user_wahaha", "/") }
|
assert_raise(ArgumentError) { File.expand_path("~foo_bar_baz_unknown_user_wahaha", "/") }
|
||||||
|
|
||||||
|
assert_incompatible_encoding {|d| File.expand_path(d)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_basename
|
def test_basename
|
||||||
@ -412,11 +421,14 @@ class TestFileExhaustive < Test::Unit::TestCase
|
|||||||
assert_equal(basename, File.basename(@file + ".", ".*"))
|
assert_equal(basename, File.basename(@file + ".", ".*"))
|
||||||
assert_equal(basename, File.basename(@file + "::$DATA", ".*"))
|
assert_equal(basename, File.basename(@file + "::$DATA", ".*"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
assert_incompatible_encoding {|d| File.basename(d)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_dirname
|
def test_dirname
|
||||||
assert(@file.start_with?(File.dirname(@file)))
|
assert(@file.start_with?(File.dirname(@file)))
|
||||||
assert_equal(".", File.dirname(""))
|
assert_equal(".", File.dirname(""))
|
||||||
|
assert_incompatible_encoding {|d| File.dirname(d)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_extname
|
def test_extname
|
||||||
@ -440,6 +452,8 @@ class TestFileExhaustive < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
assert_incompatible_encoding {|d| File.extname(d)}
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_split
|
def test_split
|
||||||
|
Loading…
x
Reference in New Issue
Block a user