From a838eb5c65cd937c36c8e0653ecde78913d47d78 Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 8 Sep 2004 09:44:46 +0000 Subject: [PATCH] * ext/stringio/stringio.c (strio_write): zero fill a gap if exsts. [ruby-dev:24190] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6873 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 11 ++++++++--- ext/stringio/stringio.c | 10 ++++++---- test/stringio/test_stringio.rb | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f48217f03..b36952d7ad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,14 +1,19 @@ +Wed Sep 8 18:44:03 2004 Nobuyoshi Nakada + + * ext/stringio/stringio.c (strio_write): zero fill a gap if exsts. + [ruby-dev:24190] + Wed Sep 8 15:19:49 2004 Hidetoshi NAGAI * ext/tcltklib/tcltklib.c (ip_init): cannot create a IP at level 4 - * ext/tk/lib/multi-tk.rb: improve 'exit' operation, security check, + * ext/tk/lib/multi-tk.rb: improve 'exit' operation, security check, and error treatment * ext/tk/lib/multi-tk.rb: allow a trusted slave IP to create slave IPs - * ext/tk/lib/tk/listbox.rb: add TkListbox#value, value=, clear, and - erase + * ext/tk/lib/tk/listbox.rb: add TkListbox#value, value=, clear, and + erase * ext/tk/lib/tk/text.rb: add TkText#clear and erase diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index 706385a0b2..573fc0ea94 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -771,22 +771,24 @@ strio_write(self, str) VALUE self, str; { struct StringIO *ptr = writable(StringIO(self)); - long len; + long len, olen; if (TYPE(str) != T_STRING) str = rb_obj_as_string(str); len = RSTRING(str)->len; if (!len) return INT2FIX(0); check_modifiable(ptr); + olen = RSTRING(ptr->string)->len; if (ptr->flags & STRIO_APPEND) { - ptr->pos = RSTRING(ptr->string)->len; + ptr->pos = olen; } - if (ptr->pos == RSTRING(ptr->string)->len) { + if (ptr->pos == olen) { rb_str_cat(ptr->string, RSTRING(str)->ptr, len); } else { - if (ptr->pos + len > RSTRING(ptr->string)->len) { + if (ptr->pos + len > olen) { rb_str_resize(ptr->string, ptr->pos + len); + MEMZERO(RSTRING(ptr->string)->ptr + olen, char, ptr->pos - olen); } else { rb_str_modify(ptr->string); diff --git a/test/stringio/test_stringio.rb b/test/stringio/test_stringio.rb index cdb35e6acc..fee305e856 100644 --- a/test/stringio/test_stringio.rb +++ b/test/stringio/test_stringio.rb @@ -20,7 +20,7 @@ class TestStringIO < Test::Unit::TestCase io.puts "abc" io.truncate(0) io.puts "def" - assert_equal("\0\0\0def\n", io.string) + assert_equal("\0\0\0\0def\n", io.string) end def test_seek_beyond_eof # [ruby-dev:24194]