[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]