diff options
| author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-10-27 02:46:54 +0000 |
|---|---|---|
| committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-10-27 02:46:54 +0000 |
| commit | b154c9488ec0e660ac4ebe7e14bede39f064d731 (patch) | |
| tree | 69f926f26570f7cbe08fe38dca0c011e8051e945 /eval.c | |
| parent | b0d8b59e5a2d29124140140b21654eec8c141327 (diff) | |
| download | ruby-b154c9488ec0e660ac4ebe7e14bede39f064d731.tar.gz ruby-b154c9488ec0e660ac4ebe7e14bede39f064d731.tar.xz ruby-b154c9488ec0e660ac4ebe7e14bede39f064d731.zip | |
* string.c (RESIZE_CAPA): check string attribute before modifying
capacity member of string structure. [ruby-dev:24594]
* ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain
performance. [ruby-talk:117701]
* sprintf.c (rb_f_sprintf): raise ArgumentError for extra
arguments, unless (digit)$ style used.
* ext/zlib/zlib.c (gzreader_gets): use memchr() to to gain
performance. [ruby-talk:117701]
* sprintf.c (rb_f_sprintf): raise ArgumentError for extra
arguments, unless (digit)$ style used.
* eval.c (frame_free): Guy Decoux solved the leak problem.
Thanks. [ruby-core:03549]
* ext/zlib/zlib.c (zstream_append_input): clear klass for z->input
to avoid potential vulnerability.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@7119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
| -rw-r--r-- | eval.c | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -7749,13 +7749,14 @@ blk_mark(data) } static void -blk_free(data) - struct BLOCK *data; -{ +frame_free(frame) struct FRAME *frame; - void *tmp; +{ + struct FRAME *tmp; - frame = data->frame.prev; + if (frame->argc > 0 && (frame->flags & FRAME_MALLOC)) + free(frame->argv); + frame = frame->prev; while (frame) { if (frame->argc > 0 && (frame->flags & FRAME_MALLOC)) free(frame->argv); @@ -7763,9 +7764,16 @@ blk_free(data) frame = frame->prev; free(tmp); } +} + +static void +blk_free(data) + struct BLOCK *data; +{ + void *tmp; + while (data) { - if (data->frame.argc > 0) - free(data->frame.argv); + frame_free(&data->frame); tmp = data; data = data->prev; free(tmp); |
