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

ruby-changes:17846

From: shyouhei <ko1@a...>
Date: Mon, 22 Nov 2010 16:29:36 +0900 (JST)
Subject: [ruby-changes:17846] Ruby:r29859 (ruby_1_8_7): Thu, 29 Jul 2010 23:33:21 +0000 nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>

shyouhei	2010-11-22 16:21:56 +0900 (Mon, 22 Nov 2010)

  New Revision: 29859

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

  Log:
    Thu, 29 Jul 2010 23:33:21 +0000  nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
     merge revision(s) 28794:28796:
     
     	* file.c (file_expand_path): should check if could find user.
     	  [ruby-core:31538]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@28795 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    Signed-off-by: URABE, Shyouhei <shyouhei@r...>
    
    * file.c (file_expand_path): home directory must be absolute.
      [ruby-core:31537]
    
    git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@28796 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
    Signed-off-by: URABE, Shyouhei <shyouhei@r...>

  Modified files:
    branches/ruby_1_8_7/ChangeLog
    branches/ruby_1_8_7/file.c
    branches/ruby_1_8_7/test/ruby/test_file_exhaustive.rb
    branches/ruby_1_8_7/version.h

Index: ruby_1_8_7/ChangeLog
===================================================================
--- ruby_1_8_7/ChangeLog	(revision 29858)
+++ ruby_1_8_7/ChangeLog	(revision 29859)
@@ -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]
+
 Thu Jul 29 22:43:57 2010  NAKAMURA, Hiroshi  <nahi@r...>
 
 	* lib/webrick/ssl.rb (WEBrick::Utils.create_self_signed_cert): wrongly
Index: ruby_1_8_7/version.h
===================================================================
--- ruby_1_8_7/version.h	(revision 29858)
+++ ruby_1_8_7/version.h	(revision 29859)
@@ -2,7 +2,7 @@
 #define RUBY_RELEASE_DATE "2010-11-22"
 #define RUBY_VERSION_CODE 187
 #define RUBY_RELEASE_CODE 20101122
-#define RUBY_PATCHLEVEL 308
+#define RUBY_PATCHLEVEL 309
 
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 8
Index: ruby_1_8_7/test/ruby/test_file_exhaustive.rb
===================================================================
--- ruby_1_8_7/test/ruby/test_file_exhaustive.rb	(revision 29858)
+++ ruby_1_8_7/test/ruby/test_file_exhaustive.rb	(revision 29859)
@@ -353,6 +353,21 @@
       assert_equal(@file, File.expand_path(@file + "."))
       assert_equal(@file, File.expand_path(@file + "::$DATA"))
     end
+    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", "/") }
+    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
   end
 
   def test_basename
Index: ruby_1_8_7/file.c
===================================================================
--- ruby_1_8_7/file.c	(revision 29858)
+++ ruby_1_8_7/file.c	(revision 29859)
@@ -2530,6 +2530,7 @@
     tainted = OBJ_TAINTED(fname);
 
     if (s[0] == '~') {
+	long userlen = 0;
 	if (isdirsep(s[1]) || s[1] == '\0') {
 	    const char *dir = getenv("HOME");
 
@@ -2557,9 +2558,10 @@
 	    s++;
 #endif
 	    s = nextdirsep(b = s);
-	    BUFCHECK(bdiff + (s-b) >= buflen);
-	    memcpy(p, b, s-b);
-	    p += s-b;
+	    userlen = s - b;
+	    BUFCHECK(bdiff + userlen >= buflen);
+	    memcpy(p, b, userlen);
+	    p += userlen;
 	    *p = '\0';
 #ifdef HAVE_PWD_H
 	    pwPtr = getpwnam(buf);
@@ -2572,8 +2574,18 @@
 	    strcpy(buf, pwPtr->pw_dir);
 	    p = buf + strlen(pwPtr->pw_dir);
 	    endpwent();
+#else
+	    rb_raise(rb_eArgError, "can't find user %s", buf);
 #endif
 	}
+	if (!is_absolute_path(RSTRING_PTR(result))) {
+	    if (userlen) {
+		rb_raise(rb_eArgError, "non-absolute home of %.*s", userlen, s);
+	    }
+	    else {
+		rb_raise(rb_eArgError, "non-absolute home");
+	    }
+	}
     }
 #ifdef DOSISH_DRIVE_LETTER
     /* skip drive letter */

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

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