ruby-changes:37973
From: nobu <ko1@a...>
Date: Sun, 22 Mar 2015 13:54:52 +0900 (JST)
Subject: [ruby-changes:37973] nobu:r50054 (trunk): file.c: check arguments lengths
nobu 2015-03-22 13:54:35 +0900 (Sun, 22 Mar 2015) New Revision: 50054 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=50054 Log: file.c: check arguments lengths * win32/file.c (rb_file_expand_path_internal): check arguments lengths and should not loose preci quielty. Modified files: trunk/win32/file.c Index: win32/file.c =================================================================== --- win32/file.c (revision 50053) +++ win32/file.c (revision 50054) @@ -350,7 +350,14 @@ rb_file_expand_path_internal(VALUE fname https://github.com/ruby/ruby/blob/trunk/win32/file.c#L350 /* convert char * to wchar_t */ if (!NIL_P(path)) { - wpath = mbstr_to_wstr(cp, RSTRING_PTR(path), (int)RSTRING_LEN(path), &wpath_len); + const long path_len = RSTRING_LEN(path); +#if SIZEOF_INT < SIZEOF_LONG + if ((long)(int)path_len != path_len) { + rb_raise(rb_eRangeError, "path (%ld bytes) is too long", + path_len); + } +#endif + wpath = mbstr_to_wstr(cp, RSTRING_PTR(path), path_len, &wpath_len); wpath_pos = wpath; } @@ -425,7 +432,15 @@ rb_file_expand_path_internal(VALUE fname https://github.com/ruby/ruby/blob/trunk/win32/file.c#L432 /* convert char * to wchar_t */ if (!NIL_P(dir)) { - wdir = mbstr_to_wstr(cp, RSTRING_PTR(dir), (int)RSTRING_LEN(dir), &wdir_len); + const long dir_len = RSTRING_LEN(dir); +#if SIZEOF_INT < SIZEOF_LONG + if ((long)(int)dir_len != dir_len) { + if (wpath) xfree(wpath); + rb_raise(rb_eRangeError, "base directory (%ld bytes) is too long", + dir_len); + } +#endif + wdir = mbstr_to_wstr(cp, RSTRING_PTR(dir), dir_len, &wdir_len); wdir_pos = wdir; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/