Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Thu, 29 Jul 2010 23:33:21 +0000 nobu <nobu@b2dd03c8-39d4-4d8f-98ff-82…

…3fe69b080e>

 merge revision(s) 28794:28796:
 ?\012
 	* 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@ruby-lang.org>
?\012
	* 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@ruby-lang.org>



git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_7@29859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information...
commit f75df0c77bb71860608c63fb760185f5290ddee9 1 parent b6ac085
@shyouhei shyouhei authored
View
10 ChangeLog
@@ -1,3 +1,13 @@
+Fri Jul 30 08:51:51 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): home directory must be absolute.
+ [ruby-core:31537]
+
+Fri Jul 30 08:33:20 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * file.c (file_expand_path): should check if could find user.
+ [ruby-core:31538]
+
Thu Jul 29 22:43:57 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
* lib/webrick/ssl.rb (WEBrick::Utils.create_self_signed_cert): wrongly
View
18 file.c
@@ -2530,6 +2530,7 @@ file_expand_path(fname, dname, result)
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 @@ file_expand_path(fname, dname, result)
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 @@ file_expand_path(fname, dname, result)
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 */
View
15 test/ruby/test_file_exhaustive.rb
@@ -353,6 +353,21 @@ def test_expand_path
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
View
2  version.h
@@ -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
Please sign in to comment.
Something went wrong with that request. Please try again.