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}")}