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/