From f86be91b56c39808ca71056f40e4cf1c786c89b3 Mon Sep 17 00:00:00 2001 From: naruse Date: Thu, 25 Jul 2013 16:33:57 +0000 Subject: [PATCH] * file.c (rb_file_expand_path_internal): fix r42160; skip '~'. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42171 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ file.c | 1 + test/ruby/test_file_exhaustive.rb | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/ChangeLog b/ChangeLog index 90dea209df..e61df241e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Jul 26 01:21:41 2013 NARUSE, Yui + + * file.c (rb_file_expand_path_internal): fix r42160; skip '~'. + Thu Jul 25 17:53:18 2013 NARUSE, Yui * lib/net/http.rb (Net::HTTP#connect): disable Nagle's algorithm on diff --git a/file.c b/file.c index a72cdd0719..b3b6f2a2bb 100644 --- a/file.c +++ b/file.c @@ -2990,6 +2990,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na } else { s = nextdirsep(b = s, fend, enc); + b++; /* b[0] is '~' */ userlen = s - b; BUFCHECK(bdiff + userlen >= buflen); memcpy(p, b, userlen); diff --git a/test/ruby/test_file_exhaustive.rb b/test/ruby/test_file_exhaustive.rb index 219d357cf2..2e563e53a8 100644 --- a/test/ruby/test_file_exhaustive.rb +++ b/test/ruby/test_file_exhaustive.rb @@ -669,6 +669,11 @@ class TestFileExhaustive < Test::Unit::TestCase assert_raise(ArgumentError, bug) { File.expand_path("~anything") } end if DRIVE + def test_expand_path_for_existent_username + user = ENV['USER'] + assert_equal(ENV['HOME'], File.expand_path("~#{user}")) + end unless DRIVE + def test_expand_path_error_for_nonexistent_username user = "\u{3086 3046 3066 3044}:\u{307F 3084 304A 3046}" assert_raise_with_message(ArgumentError, /#{user}/) {File.expand_path("~#{user}")}