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

ruby-changes:6806

From: nobu <ko1@a...>
Date: Sun, 3 Aug 2008 10:42:15 +0900 (JST)
Subject: [ruby-changes:6806] Ruby:r18322 (trunk): * string.c (rb_str_shared_replace): fixed memory leak. a patch from

nobu	2008-08-03 10:41:56 +0900 (Sun, 03 Aug 2008)

  New Revision: 18322

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

  Log:
    * string.c (rb_str_shared_replace): fixed memory leak.  a patch from
      shinichiro.h <shinichiro.hamaji AT gmail.com> at [ruby-dev:35742]

  Modified files:
    trunk/ChangeLog
    trunk/string.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18321)
+++ ChangeLog	(revision 18322)
@@ -1,3 +1,8 @@
+Sun Aug  3 10:41:54 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* string.c (rb_str_shared_replace): fixed memory leak.  a patch from
+	  shinichiro.h <shinichiro.hamaji AT gmail.com> at [ruby-dev:35742]
+
 Sat Aug  2 22:55:41 2008  Masaki Suketa  <masaki.suketa@n...>
 
 	* test/win32ole/test_err_in_callback.rb: remove temporary files.
Index: string.c
===================================================================
--- string.c	(revision 18321)
+++ string.c	(revision 18322)
@@ -616,7 +616,10 @@
     enc = STR_ENC_GET(str2);
     cr = ENC_CODERANGE(str2);
     rb_str_modify(str);
-    if (OBJ_TAINTED(str2)) OBJ_TAINT(str);
+    OBJ_INFECT(str, str2);
+    if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
+	xfree(RSTRING_PTR(str));
+    }
     if (RSTRING_LEN(str2) <= RSTRING_EMBED_LEN_MAX) {
 	STR_SET_EMBED(str);
 	memcpy(RSTRING_PTR(str), RSTRING_PTR(str2), RSTRING_LEN(str2)+1);
@@ -625,9 +628,6 @@
         ENC_CODERANGE_SET(str, cr);
 	return;
     }
-    if (!STR_SHARED_P(str) && !STR_EMBED_P(str)) {
-	xfree(RSTRING_PTR(str));
-    }
     STR_SET_NOEMBED(str);
     STR_UNSET_NOCAPA(str);
     RSTRING(str)->as.heap.ptr = RSTRING_PTR(str2);

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

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