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

ruby-changes:6825

From: nobu <ko1@a...>
Date: Mon, 4 Aug 2008 14:09:13 +0900 (JST)
Subject: [ruby-changes:6825] Ruby:r18341 (trunk): * marshal.c (dump_ensure), process.c (run_exec_dup2),

nobu	2008-08-04 14:08:57 +0900 (Mon, 04 Aug 2008)

  New Revision: 18341

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

  Log:
    * marshal.c (dump_ensure), process.c (run_exec_dup2),
      string.c (rb_str_replace), transcode.c (transcode_dispatch): fixed
      memory leaks.  based on patches from shinichiro.h <shinichiro.hamaji
      AT gmail.com> at [ruby-dev:35751].

  Modified files:
    trunk/ChangeLog
    trunk/marshal.c
    trunk/process.c
    trunk/string.c
    trunk/transcode.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 18340)
+++ ChangeLog	(revision 18341)
@@ -1,3 +1,10 @@
+Mon Aug  4 14:08:55 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* marshal.c (dump_ensure), process.c (run_exec_dup2),
+	  string.c (rb_str_replace), transcode.c (transcode_dispatch): fixed
+	  memory leaks.  based on patches from shinichiro.h <shinichiro.hamaji
+	  AT gmail.com> at [ruby-dev:35751].
+
 Sun Aug  3 19:32:52 2008  Masaki Suketa  <masaki.suketa@n...>
 
 	* ext/win32ole/win32ole.c (hash2named_arg): refactoring.
Index: string.c
===================================================================
--- string.c	(revision 18340)
+++ string.c	(revision 18341)
@@ -3424,10 +3424,10 @@
     if (STR_ASSOC_P(str2)) {
 	str2 = rb_str_new4(str2);
     }
+    if (str_independent(str) && !STR_EMBED_P(str)) {
+	xfree(RSTRING_PTR(str));
+    }
     if (STR_SHARED_P(str2)) {
-	if (str_independent(str) && !STR_EMBED_P(str)) {
-	    xfree(RSTRING_PTR(str));
-	}
 	STR_SET_NOEMBED(str);
 	RSTRING(str)->as.heap.len = len;
 	RSTRING(str)->as.heap.ptr = RSTRING_PTR(str2);
@@ -3436,7 +3436,6 @@
 	RSTRING(str)->as.heap.aux.shared = RSTRING(str2)->as.heap.aux.shared;
     }
     else {
-	rb_str_modify(str);
 	str_replace_shared(str, rb_str_new4(str2));
     }
 
Index: process.c
===================================================================
--- process.c	(revision 18340)
+++ process.c	(revision 18341)
@@ -1953,11 +1953,11 @@
             goto fail;
     }
 
+    xfree(pairs);
     return 0;
 
-fail:
-    if (pairs)
-        xfree(pairs);
+  fail:
+    xfree(pairs);
     return -1;
 }
 
Index: marshal.c
===================================================================
--- marshal.c	(revision 18340)
+++ marshal.c	(revision 18341)
@@ -803,6 +803,7 @@
     st_free_table(arg->symbols);
     st_free_table(arg->data);
     st_free_table(arg->compat_tbl);
+    if (arg->encodings) st_free_table(arg->encodings);
     DATA_PTR(arg->wrapper) = 0;
     arg->wrapper = 0;
     if (arg->taint) {
Index: transcode.c
===================================================================
--- transcode.c	(revision 18340)
+++ transcode.c	(revision 18341)
@@ -110,6 +110,7 @@
     }
     if (!val) {
 	if (!st_lookup(transcoder_table, (st_data_t)key, &val)) {
+	    xfree(key);
 	    /* multistep logic, via UTF-8 */
 	    if (!encoding_equal(from_encoding, "UTF-8") &&
 		!encoding_equal(to_encoding, "UTF-8") &&
@@ -119,6 +120,7 @@
 	    return NULL;
 	}
     }
+    xfree(key);
     return (rb_transcoder *)val;
 }
 

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

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