path: root/ext
diff options
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-30 23:53:28 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-30 23:53:28 +0000
commit3cee6a22c07abe0c60331b860c9fac3388bb72a1 (patch)
treefdbf949686d1466d6782bfb1fda68ef5f80e95cb /ext
parentb6c425aaddd38fec6a6b6f0d816bff18bc205cfd (diff)
zlib: GzipReader#rewind preserves ZSTREAM_FLAG_GZFILE
* ext/zlib/zlib.c (gzfile_reset): preserve ZSTREAM_FLAG_GZFILE [Bug #10101] * test/zlib/test_zlib.rb (test_rewind): test each_byte We must preserve the ZSTREAM_FLAG_GZFILE flag to prevent zstream_detach_buffer from: a) returning Qnil and breaking out of the `each_byte' loop b) yielding a large string to each_byte Note: the test case in bug report takes a long time. I found this bug because I noticed the massive time descrepancy between `each_byte' and `readbyte' loop before this patch. With this patch, `each_byte' and `readbyte' both take very long. git-svn-id: svn+ssh:// b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
1 files changed, 1 insertions, 0 deletions
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index c253b94d95d..223879c2dce 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -2293,6 +2293,7 @@ static void
gzfile_reset(struct gzfile *gz)
+ gz->z.flags |= ZSTREAM_FLAG_GZFILE;
gz->crc = crc32(0, Z_NULL, 0);
gz->lineno = 0;
gz->ungetc = 0;