ruby-changes:18746
From: naruse <ko1@a...>
Date: Thu, 3 Feb 2011 19:09:50 +0900 (JST)
Subject: [ruby-changes:18746] Ruby:r30773 (trunk): e ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect
naruse 2011-02-03 18:56:52 +0900 (Thu, 03 Feb 2011) New Revision: 30773 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30773 Log: e ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect Modified files: trunk/ChangeLog trunk/ext/zlib/zlib.c trunk/test/zlib/test_zlib.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 30772) +++ ChangeLog (revision 30773) @@ -1,6 +1,6 @@ Thu Feb 3 18:33:26 2011 NARUSE, Yui <naruse@r...> - * ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_new_shared + e ext/zlib/zlib.c (gzfile_reader_get_unused): use rb_str_resurrect because gz->z.input is hidden string. [ruby-core:35057] Thu Feb 3 16:34:10 2011 NARUSE, Yui <naruse@r...> Index: ext/zlib/zlib.c =================================================================== --- ext/zlib/zlib.c (revision 30772) +++ ext/zlib/zlib.c (revision 30773) @@ -2471,7 +2471,8 @@ } if (NIL_P(gz->z.input)) return Qnil; - str = rb_str_new_shared(gz->z.input); + str = rb_str_dup(gz->z.input); + str = rb_str_resurrect(str); OBJ_TAINT(str); /* for safe */ return str; } Index: test/zlib/test_zlib.rb =================================================================== --- test/zlib/test_zlib.rb (revision 30772) +++ test/zlib/test_zlib.rb (revision 30773) @@ -491,13 +491,41 @@ Zlib::GzipWriter.open(t.path) {|gz| gz.print("foobar") } Zlib::GzipReader.open(t.path) do |f| + assert_equal(nil, f.unused) assert_equal("foo", f.read(3)) - f.unused + assert_equal(nil, f.unused) assert_equal("bar", f.read) - f.unused + assert_equal(nil, f.unused) end end + def test_unused2 + zio = StringIO.new + + io = Zlib::GzipWriter.new zio + io.write 'aaaa' + io.finish + + io = Zlib::GzipWriter.new zio + io.write 'bbbb' + io.finish + + zio.rewind + + io = Zlib::GzipReader.new zio + assert_equal('aaaa', io.read) + unused = io.unused + assert_equal(24, unused.bytesize) + io.finish + + zio.pos -= unused.length + + io = Zlib::GzipReader.new zio + assert_equal('bbbb', io.read) + assert_equal(nil, io.unused) + io.finish + end + def test_read t = Tempfile.new("test_zlib_gzip_reader_read") t.close -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/