From: normalperson@... Date: 2014-08-30T23:58:22+00:00 Subject: [ruby-core:64680] [ruby-trunk - Bug #10101] Zlib::GzipReader produce different outputs for different methods applied Issue #10101 has been updated by Eric Wong. nagachika00@gmail.com wrote: > I don't have time to investigate this right now. > And zlib has no maintainer according to > https://bugs.ruby-lang.org/projects/ruby/wiki/MaintainersStdlib > Are there anyone who can handle this? Hi, r47327 should fix this: ------------------------------------------------------------------------ r47327 | normal | 2014-08-30 23:53:28 +0000 (Sat, 30 Aug 2014) | 18 lines 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. ------------------------------------------------------------------------ I should be able to help out on zlib in the future (and many bugs reproducible without graphical or proprietary dependency). ---------------------------------------- Bug #10101: Zlib::GzipReader produce different outputs for different methods applied https://bugs.ruby-lang.org/issues/10101#change-48575 * Author: Rafael Manzo * Status: Closed * Priority: Normal * Assignee: * Category: ext * Target version: * ruby -v: ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED ---------------------------------------- The methods `read`, `readbyte` and `each_byte` are producing different outputs. Comparing with the unziped file, only the result of readbyte is correct according to the size but comparing byte per byte with the original file sometimes gives differences at the same positions. This part of the differences I couldn't reproduce in a way that I could share on the internet because the original file is a magnetic resonance image subject to confidentiality. But fortunately I was able to reproduce the bug on input size. I've attached a script that illustrates the problem and here is the link for the file that I've used for the following sample output: https://drive.google.com/file/d/0B3O0CbLN-q0TcmhGR0RGeWM2UHM/edit?usp=sharing Sorry about the size, but I couldn't produce a smaller file. [manzo@WALL-A gz_debug]$ ruby -v ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-linux] [manzo@WALL-A gz_debug]$ ruby test1.rb sample.gz Size of read: 45102570 Size of each_byte: 4668 Size of readbyte: 45158752 I hope I'm right on this report and thank you a lot for your time! ---Files-------------------------------- test1.rb (316 Bytes) -- https://bugs.ruby-lang.org/