ruby-changes:14924
From: nobu <ko1@a...>
Date: Tue, 2 Mar 2010 14:29:44 +0900 (JST)
Subject: [ruby-changes:14924] Ruby:r26794 (trunk): * file.c (rb_find_file_ext_safe, rb_find_file_safe): skip argument
nobu 2010-03-02 14:29:27 +0900 (Tue, 02 Mar 2010) New Revision: 26794 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26794 Log: * file.c (rb_find_file_ext_safe, rb_find_file_safe): skip argument checks in file_expand_path(). Modified files: trunk/ChangeLog trunk/file.c Index: ChangeLog =================================================================== --- ChangeLog (revision 26793) +++ ChangeLog (revision 26794) @@ -1,3 +1,8 @@ +Tue Mar 2 14:29:24 2010 Nobuyoshi Nakada <nobu@r...> + + * file.c (rb_find_file_ext_safe, rb_find_file_safe): skip argument + checks in file_expand_path(). + Tue Mar 2 13:54:44 2010 Marc-Andre Lafortune <ruby-core@m...> * test/ruby/test_math.rb: Fix lgamma test Index: file.c =================================================================== --- file.c (revision 26793) +++ file.c (revision 26794) @@ -2752,7 +2752,6 @@ int tainted; rb_encoding *extenc = 0; - FilePathValue(fname); s = StringValuePtr(fname); BUFINIT(); tainted = OBJ_TAINTED(fname); @@ -3012,10 +3011,23 @@ return result; } +#define EXPAND_PATH_BUFFER() rb_usascii_str_new(0, MAXPATHLEN + 2) + +#define check_expand_path_args(fname, dname) \ + ((fname = rb_get_path(fname)), \ + (NIL_P(dname) ? dname : (dname = rb_get_path(dname)))) + +static VALUE +file_expand_path_1(VALUE fname) +{ + return file_expand_path(fname, Qnil, 0, EXPAND_PATH_BUFFER()); +} + VALUE rb_file_expand_path(VALUE fname, VALUE dname) { - return file_expand_path(fname, dname, 0, rb_usascii_str_new(0, MAXPATHLEN + 2)); + check_expand_path_args(fname, dname); + return file_expand_path(fname, dname, 0, EXPAND_PATH_BUFFER()); } /* @@ -3051,7 +3063,8 @@ VALUE rb_file_absolute_path(VALUE fname, VALUE dname) { - return file_expand_path(fname, dname, 1, rb_usascii_str_new(0, MAXPATHLEN + 2)); + check_expand_path_args(fname, dname); + return file_expand_path(fname, dname, 1, EXPAND_PATH_BUFFER()); } /* @@ -4815,7 +4828,7 @@ if (!ext[0]) return 0; if (f[0] == '~') { - fname = rb_file_expand_path(*filep, Qnil); + fname = file_expand_path_1(fname); if (safe_level >= 1 && OBJ_TAINTED(fname)) { rb_raise(rb_eSecurityError, "loading from unsafe file %s", f); } @@ -4828,7 +4841,7 @@ if (safe_level >= 1 && !fpath_check(fname)) { rb_raise(rb_eSecurityError, "loading from unsafe path %s", f); } - if (!expanded) fname = rb_file_expand_path(fname, Qnil); + if (!expanded) fname = file_expand_path_1(fname); fnlen = RSTRING_LEN(fname); for (i=0; ext[i]; i++) { rb_str_cat2(fname, ext[i]); @@ -4886,7 +4899,7 @@ int expanded = 0; if (f[0] == '~') { - tmp = rb_file_expand_path(path, Qnil); + tmp = file_expand_path_1(path); if (safe_level >= 1 && OBJ_TAINTED(tmp)) { rb_raise(rb_eSecurityError, "loading from unsafe file %s", f); } @@ -4901,7 +4914,7 @@ } if (!file_load_ok(f)) return 0; if (!expanded) - path = copy_path_class(rb_file_expand_path(path, Qnil), path); + path = copy_path_class(file_expand_path_1(path), path); return path; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/