1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18341 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2008-08-04 05:08:57 +00:00
parent e231d67ee1
commit 3916eb783c
5 changed files with 16 additions and 7 deletions

View file

@ -1,3 +1,10 @@
Mon Aug 4 14:08:55 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* 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@nifty.ne.jp> Sun Aug 3 19:32:52 2008 Masaki Suketa <masaki.suketa@nifty.ne.jp>
* ext/win32ole/win32ole.c (hash2named_arg): refactoring. * ext/win32ole/win32ole.c (hash2named_arg): refactoring.

View file

@ -803,6 +803,7 @@ dump_ensure(struct dump_arg *arg)
st_free_table(arg->symbols); st_free_table(arg->symbols);
st_free_table(arg->data); st_free_table(arg->data);
st_free_table(arg->compat_tbl); st_free_table(arg->compat_tbl);
if (arg->encodings) st_free_table(arg->encodings);
DATA_PTR(arg->wrapper) = 0; DATA_PTR(arg->wrapper) = 0;
arg->wrapper = 0; arg->wrapper = 0;
if (arg->taint) { if (arg->taint) {

View file

@ -1953,11 +1953,11 @@ run_exec_dup2(VALUE ary, VALUE save)
goto fail; goto fail;
} }
xfree(pairs);
return 0; return 0;
fail: fail:
if (pairs) xfree(pairs);
xfree(pairs);
return -1; return -1;
} }

View file

@ -3424,10 +3424,10 @@ rb_str_replace(VALUE str, VALUE str2)
if (STR_ASSOC_P(str2)) { if (STR_ASSOC_P(str2)) {
str2 = rb_str_new4(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_SHARED_P(str2)) {
if (str_independent(str) && !STR_EMBED_P(str)) {
xfree(RSTRING_PTR(str));
}
STR_SET_NOEMBED(str); STR_SET_NOEMBED(str);
RSTRING(str)->as.heap.len = len; RSTRING(str)->as.heap.len = len;
RSTRING(str)->as.heap.ptr = RSTRING_PTR(str2); 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; RSTRING(str)->as.heap.aux.shared = RSTRING(str2)->as.heap.aux.shared;
} }
else { else {
rb_str_modify(str);
str_replace_shared(str, rb_str_new4(str2)); str_replace_shared(str, rb_str_new4(str2));
} }

View file

@ -110,6 +110,7 @@ transcode_dispatch(const char *from_encoding, const char *to_encoding)
} }
if (!val) { if (!val) {
if (!st_lookup(transcoder_table, (st_data_t)key, &val)) { if (!st_lookup(transcoder_table, (st_data_t)key, &val)) {
xfree(key);
/* multistep logic, via UTF-8 */ /* multistep logic, via UTF-8 */
if (!encoding_equal(from_encoding, "UTF-8") && if (!encoding_equal(from_encoding, "UTF-8") &&
!encoding_equal(to_encoding, "UTF-8") && !encoding_equal(to_encoding, "UTF-8") &&
@ -119,6 +120,7 @@ transcode_dispatch(const char *from_encoding, const char *to_encoding)
return NULL; return NULL;
} }
} }
xfree(key);
return (rb_transcoder *)val; return (rb_transcoder *)val;
} }