[前][次][番号順一覧][スレッド一覧]

ruby-changes:37780

From: usa <ko1@a...>
Date: Fri, 6 Mar 2015 02:51:06 +0900 (JST)
Subject: [ruby-changes:37780] usa:r49861 (trunk): * dir.c (replace_real_basename): need to check the return value of

usa	2015-03-06 02:51:02 +0900 (Fri, 06 Mar 2015)

  New Revision: 49861

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49861

  Log:
    * dir.c (replace_real_basename): need to check the return value of
      GLOB_REALLOC().
      [ruby-core:68430] [Bug #10941]

  Modified files:
    trunk/ChangeLog
    trunk/dir.c
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 49860)
+++ ChangeLog	(revision 49861)
@@ -1,3 +1,8 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Fri Mar  6 02:50:12 2015  NAKAMURA Usaku  <usa@r...>
+
+	* dir.c (replace_real_basename): need to check the return value of
+	  GLOB_REALLOC().
+
 Fri Mar  6 02:26:03 2015  NAKAMURA Usaku  <usa@r...>
 
 	* dir.c (replace_real_basename): shouldn't create Ruby object before
Index: dir.c
===================================================================
--- dir.c	(revision 49860)
+++ dir.c	(revision 49861)
@@ -1489,21 +1489,33 @@ replace_real_basename(char *path, long b https://github.com/ruby/ruby/blob/trunk/dir.c#L1489
     if (h == INVALID_HANDLE_VALUE) return path;
     FindClose(h);
     if (tmp) {
+	char *buf;
 	tmp = rb_w32_conv_from_wchar(fd.cFileName, enc);
 	wlen = RSTRING_LEN(tmp);
-	path = GLOB_REALLOC(path, base + wlen + 1);
-	memcpy(path + base, RSTRING_PTR(tmp), wlen);
+	buf = GLOB_REALLOC(path, base + wlen + 1);
+	if (buf) {
+	    path = buf;
+	    memcpy(path + base, RSTRING_PTR(tmp), wlen);
+	    path[base + wlen] = 0;
+	}
 	rb_str_resize(tmp, 0);
     }
     else {
 	char *utf8filename;
 	wlen = WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, NULL, 0, NULL, NULL);
 	utf8filename = GLOB_REALLOC(0, wlen);
-	WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, utf8filename, wlen, NULL, NULL);
-	memcpy(path + base, utf8filename, wlen);
-	GLOB_FREE(utf8filename);
+	if (utf8filename) {
+	    char *buf;
+	    WideCharToMultiByte(CP_UTF8, 0, fd.cFileName, -1, utf8filename, wlen, NULL, NULL);
+	    buf = GLOB_REALLOC(path, base + wlen + 1);
+	    if (buf) {
+		path = buf;
+		memcpy(path + base, utf8filename, wlen);
+		path[base + wlen] = 0;
+	    }
+	    GLOB_FREE(utf8filename);
+	}
     }
-    path[base + wlen] = 0;
     return path;
 }
 #elif USE_NAME_ON_FS == 1

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]