From 3916eb783c3154f62b4c2d7d6a7b88c656281822 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 4 Aug 2008 05:08:57 +0000 Subject: * 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 at [ruby-dev:35751]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18341 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index 0231109f6e..e14f298cc8 100644 --- a/string.c +++ b/string.c @@ -3424,10 +3424,10 @@ rb_str_replace(VALUE str, VALUE str2) 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 @@ rb_str_replace(VALUE str, VALUE str2) 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)); } -- cgit v1.2.3