[#36034] [Backport92 - Backport #4651][Open] Bus Error using continuation on x86_64-darwin11.0.0 (Lion) — Erik Michaels-Ober <sferik@...>

17 messages 2011/05/07

[#36058] draft schedule of Ruby 1.9.3 — "Yuki Sonoda (Yugui)" <yugui@...>

-----BEGIN PGP SIGNED MESSAGE-----

18 messages 2011/05/09

[#36131] Re: [ruby-cvs:38172] Ruby:r30989 (trunk): * include/ruby/win32.h: define WIN32 if neither _WIN64 nor WIN32 defined. it forces to use push/pop for pack(4) pragma. — "Yuki Sonoda (Yugui)" <yugui@...>

Hi arton,

7 messages 2011/05/12

[#36156] [Ruby 1.9 - Bug #4683][Open] [PATCH] io.c: copy_stream execute interrupts and retry — Eric Wong <normalperson@...>

11 messages 2011/05/12

[#36316] [Ruby 1.9 - Bug #4731][Open] ruby -S irb fails with mingw/msys vanilla builds — Roger Pack <rogerpack2005@...>

12 messages 2011/05/18

[#36329] [Ruby 1.9 - Bug #4738][Open] gem install fails with "Encoding::ConverterNotFoundError" on windows 7 greek — Ilias Lazaridis <ilias@...>

11 messages 2011/05/19

[#36390] [Ruby 1.9 - Feature #4766][Open] Range#bsearch — Yusuke Endoh <mame@...>

23 messages 2011/05/22

[#36406] 1.8.7 release next month — Urabe Shyouhei <shyouhei@...>

Hello core people,

18 messages 2011/05/23
[#36414] Re: 1.8.7 release next month — Luis Lavena <luislavena@...> 2011/05/23

2011/5/23 Urabe Shyouhei <shyouhei@ruby-lang.org>:

[#36487] Re: 1.8.7 release next month — Urabe Shyouhei <shyouhei@...> 2011/05/26

Hi Luis,

[#36488] Re: 1.8.7 release next month — Hidetoshi NAGAI <nagai@...> 2011/05/26

From: Urabe Shyouhei <shyouhei@ruby-lang.org>

[#36496] Re: 1.8.7 release next month — Hidetoshi NAGAI <nagai@...> 2011/05/26

From: Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>

[#36712] Re: 1.8.7 release next month — Urabe Shyouhei <shyouhei@...> 2011/06/03

Ping Luis, how's it going?

[#36748] Re: 1.8.7 release next month — Luis Lavena <luislavena@...> 2011/06/05

On Fri, Jun 3, 2011 at 5:18 AM, Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:

[#36434] [Ruby 1.9 - Feature #4774][Open] User Friendly Handling of "Encoding::ConverterNotFoundError" — Lazaridis Ilias <ilias@...>

11 messages 2011/05/24

[#36447] [Ruby 1.9 - Bug #4777][Open] Ruby 1.9.2-p180 ignoring INT, TERM, and QUIT until it receives CONT — Nathan Sobo <nathansobo@...>

10 messages 2011/05/25

[#36559] [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Tom Wardrop <tom@...>

48 messages 2011/05/30
[#36560] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Yukihiro Matsumoto <matz@...> 2011/05/30

Hi,

[#36571] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Anurag Priyam <anurag08priyam@...> 2011/05/30

> Iff 'key': 'value'} means {:key => 'value'} I have no objection.

[#36573] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Yukihiro Matsumoto <matz@...> 2011/05/30

Hi,

[#36578] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Cezary <cezary.baginski@...> 2011/05/30

On Mon, May 30, 2011 at 04:21:32PM +0900, Yukihiro Matsumoto wrote:

[#36580] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2011/05/30

Em 30-05-2011 07:58, Cezary escreveu:

[#36581] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Michael Edgar <adgar@...> 2011/05/30

Since :"#{abc}" is allowed in Ruby, I imagine that any such substitute syntax would preserve that property.

[#36587] Re: [Ruby 1.9 - Feature #4801][Open] Shorthand Hash Syntax for Strings — Cezary <cezary.baginski@...> 2011/05/30

On Mon, May 30, 2011 at 09:05:04PM +0900, Michael Edgar wrote:

[ruby-core:36451] [Backport87 - Backport #4278][Closed] Ruby Zlib::GzipReader Consistently Fails When Large Uncompressed File Size

From: Shyouhei Urabe <shyouhei@...>
Date: 2011-05-25 05:14:27 UTC
List: ruby-core #36451
Issue #4278 has been updated by Shyouhei Urabe.

Status changed from Assigned to Closed

I think I have fixed this.
----------------------------------------
Backport #4278: Ruby Zlib::GzipReader Consistently Fails When Large Uncompressed File Size
http://redmine.ruby-lang.org/issues/4278

Author: Andrew R Jackson
Status: Closed
Priority: Normal
Assignee: Shyouhei Urabe
Category: 
Target version: 
ruby -v: ruby 1.9.1p429 (2010-07-02 revision 28523) [x86_64-linux]


=begin
 PROBLEM:
 
 If a .gz file was created from an input larger than 2^32-1 bytes (e.g. a 4.3GB file was gzipped), then Ruby's Zlib::GzipReader will consistently fail with "invalid compressed data -- length error".
 
 This is due to a bug in ext/zlib.c that comes with Ruby. Specifically, the bug is in gzfile_check_footer().
 
 The .gz file will be correctly uncompressable by the gunzip command. This is a Ruby-specific bug.
 
 
 SCOPE:
 
 This bug has been verified to affect both 1.9.1p429 and various patch levels for Ruby 1.8.*.
 
 It is likely to affect older versions as well.
 
 
 TO REPLICATE:
 
 On a 64-bit OS with LARGE_FILE support:
 * create raw file which is >4.2GB
 * gzip the raw file
 * in Ruby, use Zlib::GzipReader to loop over each line; it will fail as it approaches 4.2Gb of uncompressed bytes read
 * verify gunzip of the raw file works just fine
 
 
 CAUSE: gzfile_check_footer() in ext/zlib.c
 
 Within this function, gzfile_get32() is used to get the length field from the gzip footer (aka trailer).
 
 The length field in the gzip footer (aka trailer) is a 4-byte field that: "contains the size of the original (uncompressed) input data modulo 2^32".
 
 But "z.stream.total_out" is a uLong that tracks the total uncompressed bytes streamed out. It is maintained by the zlib itself as its routines are used to stream out uncompressed data from the gzip file.
 * uLong is zlib typedef for unsigned long and is 8 bytes on a 64-bit OS
 * thus, it can keep track the streaming of of more than 4.2GB of uncompressed output
 * total_out - "total nb of bytes output so far"
 
 Thus, I believe it is incorrect to compare "length" and "z.stream.total_out" as is done in gzfile_check_footer().
 * This will work only when: (a) less than 4.2GB are streamed from the file or (b) the original file was <4.2GB
 * It fails when there is more than 4.2GB of uncompressed data streamed
 
 
 static void
 gzfile_check_footer(struct gzfile *gz)
 {
     unsigned long crc, length;
 
 /* ...SNIP...following will always call rb_raise when uncompressed data was >4.2GB */
 
     if (gz->z.stream.total_out != length) {
         rb_raise(cLengthError, "invalid compressed data -- length error");
     }
 }
 
 SOLUTION:
 
 I think it would be correct to compare: z.stream.total_out __modulo 2^32__ AGAINST length
 * I don't think it is correct to compare them directly without the modulo operation, which would fail when total_out > 4.2GB
=end



-- 
http://redmine.ruby-lang.org

In This Thread

Prev Next