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/