ruby-reference-manual:762
From: Kouya <kouyataifu4@g...>
Date: Tue, 6 May 2008 11:29:54 +0900
Subject: [ruby-reference-manual:762] Zlib::GzipReader#eachで無限ループ
こんにちは。kouyaです。 いま、zlib のリファレンスマニュアルを書いているのですが、 下記スクリプトで無限ループになります。 IO#.eachだと無限ループになりません。 ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-darwin9.2.0] require 'zlib' File.open('hoge.txt', "w") { |fp| fp.puts 'hoge' fp.puts 'fuga' } fp = File.open('hoge.txt') fp.each(nil) { |line| puts line } Zlib::GzipWriter.open('hoge.gz') { |gz| gz.puts 'hoge' gz.puts 'fuga' } gz = Zlib::GzipReader.open('hoge.gz') gz.each(nil) { |line| puts line break # break がないと無限ループ } gz.close この辺りを変えたら無限ループはなくなりました。 バグでしょうか? よろしくお願いします。 Index: ext/zlib/zlib.c =================================================================== --- ext/zlib/zlib.c (revision 16303) +++ ext/zlib/zlib.c (working copy) @@ -3111,6 +3111,8 @@ if (NIL_P(rs)) { dst = gzfile_read_all(gz); if (RSTRING(dst)->len != 0) gz->lineno++; + else + return Qnil; return dst; } -- kouya -- ML: ruby-reference-manual@m... 使い方: http://QuickML.com/