ruby-changes:52213
From: nagachika <ko1@a...>
Date: Sat, 18 Aug 2018 01:27:18 +0900 (JST)
Subject: [ruby-changes:52213] nagachika:r64421 (ruby_2_5): merge revision(s) 62952: [Backport #14638]
nagachika 2018-08-18 01:27:13 +0900 (Sat, 18 Aug 2018) New Revision: 64421 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=64421 Log: merge revision(s) 62952: [Backport #14638] win32/file.c: relative path with drive letter * win32/file.c (IS_ABSOLUTE_PATH_P): home directory should not be a relative path regardless a drive letter. PathIsRelativeW returns FALSE on such path. [ruby-core:86356] [Bug #14638] Modified directories: branches/ruby_2_5/ Modified files: branches/ruby_2_5/test/ruby/test_file_exhaustive.rb branches/ruby_2_5/version.h branches/ruby_2_5/win32/file.c Index: ruby_2_5/version.h =================================================================== --- ruby_2_5/version.h (revision 64420) +++ ruby_2_5/version.h (revision 64421) @@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_5/version.h#L1 #define RUBY_VERSION "2.5.2" #define RUBY_RELEASE_DATE "2018-08-18" -#define RUBY_PATCHLEVEL 71 +#define RUBY_PATCHLEVEL 72 #define RUBY_RELEASE_YEAR 2018 #define RUBY_RELEASE_MONTH 8 Index: ruby_2_5/test/ruby/test_file_exhaustive.rb =================================================================== --- ruby_2_5/test/ruby/test_file_exhaustive.rb (revision 64420) +++ ruby_2_5/test/ruby/test_file_exhaustive.rb (revision 64421) @@ -891,6 +891,8 @@ class TestFileExhaustive < Test::Unit::T https://github.com/ruby/ruby/blob/trunk/ruby_2_5/test/ruby/test_file_exhaustive.rb#L891 assert_raise(ArgumentError) { File.expand_path(".", UnknownUserHome) } assert_nothing_raised(ArgumentError) { File.expand_path("#{DRIVE}/", UnknownUserHome) } + ENV["HOME"] = "#{DRIVE}UserHome" + assert_raise(ArgumentError) { File.expand_path("~") } ensure ENV["HOME"] = home end Index: ruby_2_5/win32/file.c =================================================================== --- ruby_2_5/win32/file.c (revision 64420) +++ ruby_2_5/win32/file.c (revision 64421) @@ -22,6 +22,15 @@ static struct code_page_table { https://github.com/ruby/ruby/blob/trunk/ruby_2_5/win32/file.c#L22 #define IS_DIR_SEPARATOR_P(c) (c == L'\\' || c == L'/') #define IS_DIR_UNC_P(c) (IS_DIR_SEPARATOR_P(c[0]) && IS_DIR_SEPARATOR_P(c[1])) +static int +IS_ABSOLUTE_PATH_P(const WCHAR *path, size_t len) +{ + if (len < 2) return FALSE; + if (ISALPHA(path[0])) + return len > 2 && path[1] == L':' && IS_DIR_SEPARATOR_P(path[2]); + else + return IS_DIR_UNC_P(path); +} /* MultiByteToWideChar() doesn't work with code page 51932 */ #define INVALID_CODE_PAGE 51932 @@ -315,7 +324,7 @@ rb_file_expand_path_internal(VALUE fname https://github.com/ruby/ruby/blob/trunk/ruby_2_5/win32/file.c#L324 } whome_len = wcslen(whome); - if (PathIsRelativeW(whome) && !(whome_len >= 2 && IS_DIR_UNC_P(whome))) { + if (!IS_ABSOLUTE_PATH_P(whome, whome_len)) { free(wpath); xfree(whome); rb_raise(rb_eArgError, "non-absolute home"); @@ -397,7 +406,7 @@ rb_file_expand_path_internal(VALUE fname https://github.com/ruby/ruby/blob/trunk/ruby_2_5/win32/file.c#L406 } whome_len = wcslen(whome); - if (PathIsRelativeW(whome) && !(whome_len >= 2 && IS_DIR_UNC_P(whome))) { + if (!IS_ABSOLUTE_PATH_P(whome, whome_len)) { free(wpath); free(wdir); xfree(whome); @@ -523,7 +532,7 @@ rb_file_expand_path_internal(VALUE fname https://github.com/ruby/ruby/blob/trunk/ruby_2_5/win32/file.c#L532 buffer_pos[0] = L'\0'; /* tainted if path is relative */ - if (!tainted && PathIsRelativeW(buffer) && !(buffer_len >= 2 && IS_DIR_UNC_P(buffer))) + if (!tainted && !IS_ABSOLUTE_PATH_P(buffer, buffer_len)) tainted = 1; /* FIXME: Make this more robust */ Index: ruby_2_5 =================================================================== --- ruby_2_5 (revision 64420) +++ ruby_2_5 (revision 64421) Property changes on: ruby_2_5 ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /trunk:r62952 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/