mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* 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
					
				
					 5 changed files with 29 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -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>
 | 
			
		||||
 | 
			
		||||
	* 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 */	\
 | 
			
		||||
    (!RB_TYPE_P(str, T_STRING) ?		\
 | 
			
		||||
     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
 | 
			
		||||
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)) {
 | 
			
		||||
	rb_insecure_operation();
 | 
			
		||||
    }
 | 
			
		||||
    rb_enc_check(tmp, rb_enc_from_encoding(rb_usascii_encoding()));
 | 
			
		||||
    return rb_str_new4(tmp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -161,6 +161,11 @@ class TestDir < Test::Unit::TestCase
 | 
			
		|||
                 Dir.glob(File.join(@root, '{\{\},a}')))
 | 
			
		||||
    assert_equal([], Dir.glob(File.join(@root, '[')))
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
  def test_foreach
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,13 @@ require "fileutils"
 | 
			
		|||
require "tmpdir"
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
    @dir = Dir.mktmpdir("rubytest-file")
 | 
			
		||||
    File.chown(-1, Process.gid, @dir)
 | 
			
		||||
| 
						 | 
				
			
			@ -388,6 +395,8 @@ class TestFileExhaustive < Test::Unit::TestCase
 | 
			
		|||
    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_incompatible_encoding {|d| File.expand_path(d)}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_basename
 | 
			
		||||
| 
						 | 
				
			
			@ -412,11 +421,14 @@ class TestFileExhaustive < Test::Unit::TestCase
 | 
			
		|||
      assert_equal(basename, File.basename(@file + ".", ".*"))
 | 
			
		||||
      assert_equal(basename, File.basename(@file + "::$DATA", ".*"))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    assert_incompatible_encoding {|d| File.basename(d)}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_dirname
 | 
			
		||||
    assert(@file.start_with?(File.dirname(@file)))
 | 
			
		||||
    assert_equal(".", File.dirname(""))
 | 
			
		||||
    assert_incompatible_encoding {|d| File.dirname(d)}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_extname
 | 
			
		||||
| 
						 | 
				
			
			@ -440,6 +452,8 @@ class TestFileExhaustive < Test::Unit::TestCase
 | 
			
		|||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    assert_incompatible_encoding {|d| File.extname(d)}
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_split
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue