[ruby-list:37797] Re: Zlib::BufError with Zlib::GzipReader

From: UENO Katsuhiro <unnie@...>
Date: 2003-06-18 14:16:10 UTC
List: ruby-list #37797
うえのです。

On Wed, 18 Jun 2003 21:11:40 +0900
Tanaka Akira <akr@m17n.org> wrote:

> とあるデータに対し、Zlib::GzipReader が Zlib::BufError を返すことに気
> がつきました。(そのデータは最後に添付します。)
snip..
> この sites.lirs.gz というものは gzip -d や zlib 付属の minigzip ではと
> くに問題なく展開できますし、次のようにして Zlib::Inflate を使っても問
> 題なく展開でき、gzip -d の出力と一致します。
snip..
> というわけで、この Zlib::BufError が出るというのは Zlib::GzipReader の
> 問題なのではないかと思うんですが、実際のところどうなんでしょう?

Zlib::Inflate 側の問題でした。このようにすると Zlib::Inflate でも
Zlib::BufError が発生します。

% ruby -r./zlib -e 's = File.read("sites.lirs.gz")
i = Zlib::Inflate.new(-Zlib::MAX_WBITS)
i.inflate s[10...2048]
i.inflate s[2048..-9]
i.finish'
-e:3:in `inflate': buffer error (Zlib::BufError)
        from -e:3


Index: zlib.c
===================================================================
RCS file: /src/shim/ruby16/ext/zlib/zlib.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -p -r1.14 -r1.15
--- zlib.c	6 Apr 2003 09:14:49 -0000	1.14
+++ zlib.c	18 Jun 2003 14:10:02 -0000	1.15
@@ -3,7 +3,7 @@
  *
  *   Copyright (C) UENO Katsuhiro 2000-2003
  *
- * $Id: zlib.c,v 1.14 2003/04/06 09:14:49 katsu Exp $
+ * $Id: zlib.c,v 1.15 2003/06/18 14:10:02 katsu Exp $
  */
 
 #include <ruby.h>
@@ -788,6 +788,11 @@ zstream_run(z, src, len, flush)
 	    break;
 	}
 	if (err != Z_OK) {
+	    if (flush != Z_FINISH && err == Z_BUF_ERROR
+		&& z->stream.avail_out > 0) {
+		z->flags |= ZSTREAM_FLAG_IN_STREAM;
+		break;
+	    }
 	    zstream_reset_input(z);
 	    if (z->stream.avail_in > 0) {
 		zstream_append_input(z, z->stream.next_in, z->stream.avail_in);


 --  ----  -     - - -- -
うえの かつひろ <unnie@blue.sky.or.jp>

In This Thread

Prev Next