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/