[#35027] [Ruby 1.9-Bug#4352][Open] [patch] Fix eval(s, b) backtrace; make eval(s, b) consistent with eval(s) — "James M. Lawrence" <redmine@...>

Bug #4352: [patch] Fix eval(s, b) backtrace; make eval(s, b) consistent with eval(s)

16 messages 2011/02/01

[#35114] [Ruby 1.9-Bug#4373][Open] http.rb:677: [BUG] Segmentation fault — Christian Fazzini <redmine@...>

Bug #4373: http.rb:677: [BUG] Segmentation fault

59 messages 2011/02/06

[#35171] [Ruby 1.9-Bug#4386][Open] encoding: directive does not affect regex expressions — mathew murphy <redmine@...>

Bug #4386: encoding: directive does not affect regex expressions

9 messages 2011/02/09

[#35237] [Ruby 1.9-Bug#4400][Open] nested at_exit hooks run in strange order — Suraj Kurapati <redmine@...>

Bug #4400: nested at_exit hooks run in strange order

12 messages 2011/02/15

[ruby-core:35057] [Ruby 1.9-Bug#4360][Open] Zlib::GzipReader#unused raises "called on hidden object" error when called

From: Eric Hodel <redmine@...>
Date: 2011-02-03 01:31:34 UTC
List: ruby-core #35057
Bug #4360: Zlib::GzipReader#unused raises "called on hidden object" error when called
http://redmine.ruby-lang.org/issues/show/4360

Author: Eric Hodel
Status: Open, Priority: Normal
Category: ext
ruby -v: ruby 1.9.3dev (2011-02-01 trunk 30751) [x86_64-darwin10.6.0]

When reading concatenated gzip streams #unused is provided for accessing the data that has been read from the IO but not consumed by libz.  Unfortunately calling this method raises an exception:

  $ ruby19 -v t.rb
  ruby 1.9.3dev (2011-02-01 trunk 30751) [x86_64-darwin10.6.0]
  aaaa
  t.rb:21:in `<main>': method `method_missing' called on hidden T_STRING object (0x0000010090ee20 flags=0x6105 klass=0x0) (NotImplementedError)

Zlib::GzipReader#unused returns the internal buffer directly but dups it.  Copying the input string's contents duplicates fixes the problem.  A stupid patch is attached.

This occurs on 1.8.7, 1.9.1 and 1.9.2 as well.


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

Attachments (2)

t.rb (353 Bytes, text/x-ruby-script)
require 'stringio'
require 'zlib'

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
puts io.read
unused = io.unused
io.finish

zio.pos -= unused.length

io = Zlib::GzipReader.new zio
puts io.read
unused = io.unused
io.finish

zlib.c.unused.patch (478 Bytes, text/x-diff)
Index: ext/zlib/zlib.c
===================================================================
--- ext/zlib/zlib.c	(revision 30767)
+++ ext/zlib/zlib.c	(working copy)
@@ -2471,7 +2471,9 @@ gzfile_reader_get_unused(struct gzfile *
     }
     if (NIL_P(gz->z.input)) return Qnil;
 
-    str = rb_str_dup(gz->z.input);
+    str = rb_str_new(NULL, 0);
+    rb_str_concat(str, gz->z.input);
+    //str = rb_str_dup(gz->z.input);
     OBJ_TAINT(str);  /* for safe */
     return str;
 }

In This Thread

Prev Next