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/