[前][次][番号順一覧][スレッド一覧]

ruby-changes:16988

From: yugui <ko1@a...>
Date: Sat, 14 Aug 2010 17:16:02 +0900 (JST)
Subject: [ruby-changes:16988] Ruby:r28985 (ruby_1_9_2): merges r28795 and r28796 from trunk into ruby_1_9_2.

yugui	2010-08-14 17:12:05 +0900 (Sat, 14 Aug 2010)

  New Revision: 28985

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28985

  Log:
    merges r28795 and r28796 from trunk into ruby_1_9_2.
    --
    * file.c (file_expand_path): should check if could find user.
      [ruby-core:31538]
    --
    * file.c (file_expand_path): home directory must be absolute.
      [ruby-core:31537]

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/file.c
    branches/ruby_1_9_2/test/ruby/test_file_exhaustive.rb

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 28984)
+++ ruby_1_9_2/ChangeLog	(revision 28985)
@@ -1,3 +1,13 @@
+Fri Jul 30 08:51:51 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (file_expand_path): home directory must be absolute.
+	  [ruby-core:31537]
+
+Fri Jul 30 08:33:20 2010  Nobuyoshi Nakada  <nobu@r...>
+
+	* file.c (file_expand_path): should check if could find user.
+	  [ruby-core:31538]
+
 Sat Aug  7 13:33:25 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* vm_eval.c (vm_call0): fix for VM_METHOD_TYPE_NOTIMPLEMENTED.
Index: ruby_1_9_2/test/ruby/test_file_exhaustive.rb
===================================================================
--- ruby_1_9_2/test/ruby/test_file_exhaustive.rb	(revision 28984)
+++ ruby_1_9_2/test/ruby/test_file_exhaustive.rb	(revision 28985)
@@ -396,11 +396,20 @@
       assert_match(/\Ac:\//i, File.expand_path('c:'), '[ruby-core:31591]')
     end
     assert_kind_of(String, File.expand_path("~"))
-    unless /mingw|mswin/ =~ RUBY_PLATFORM
-      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", "/") }
+    begin
+      bug3630 = '[ruby-core:31537]'
+      home = ENV["HOME"]
+      ENV["HOME"] = nil
+      assert_raise(ArgumentError) { File.expand_path("~") }
+      ENV["HOME"] = "~"
+      assert_raise(ArgumentError, bug3630) { File.expand_path("~") }
+      ENV["HOME"] = "."
+      assert_raise(ArgumentError, bug3630) { File.expand_path("~") }
+    ensure
+      ENV["HOME"] = home
     end
-
     assert_incompatible_encoding {|d| File.expand_path(d)}
   end
 
Index: ruby_1_9_2/file.c
===================================================================
--- ruby_1_9_2/file.c	(revision 28984)
+++ ruby_1_9_2/file.c	(revision 28985)
@@ -2851,6 +2851,7 @@
     tainted = OBJ_TAINTED(fname);
 
     if (s[0] == '~' && abs_mode == 0) {      /* execute only if NOT absolute_path() */
+	long userlen = 0;
 	tainted = 1;
 	if (isdirsep(s[1]) || s[1] == '\0') {
 	    buf = 0;
@@ -2859,13 +2860,24 @@
 	}
 	else {
 	    s = nextdirsep(b = s);
-	    BUFCHECK(bdiff + (s-b) >= buflen);
-	    memcpy(p, b, s-b);
-	    rb_str_set_len(result, s-b);
+	    userlen = s - b;
+	    BUFCHECK(bdiff + userlen >= buflen);
+	    memcpy(p, b, userlen);
+	    rb_str_set_len(result, userlen);
 	    buf = p + 1;
-	    p += s-b;
+	    p += userlen;
 	}
-	rb_home_dir(buf, result);
+	if (NIL_P(rb_home_dir(buf, result))) {
+	    rb_raise(rb_eArgError, "can't find user %s", buf);
+	}
+	if (!rb_is_absolute_path(RSTRING_PTR(result))) {
+	    if (userlen) {
+		rb_raise(rb_eArgError, "non-absolute home of %.*s", (int)userlen, b);
+	    }
+	    else {
+		rb_raise(rb_eArgError, "non-absolute home");
+	    }
+	}
 	BUFINIT();
 	p = pend;
     }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]