Project

General

Profile

Bug #13094

Zlib::GzipReader eof?がfalseなのにgetsでnilが返ってくる

Added by iehn (Hironao TSUTSUMIDA) over 2 years ago. Updated over 2 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.4.0preview2 (2016-09-09 trunk 56129) [x86_64-darwin15]
[ruby-core:78937]

Description

下記のように、eof?がfalseであればgetsでnilが返ってくることはないことを期待してるとエラーが起きてしまいます。
zlibでeof?は非推奨でしょうか?

require 'zlib'
o = ('!'..'~').to_a
i = 225
1000.times do
  Zlib::GzipWriter.open('./s.gz') do |gz|
    i.times do
      gz.write(o.sample(10)*""+"\n")
    end
  end
  Zlib::GzipReader.open("./s.gz") { |gz| puts gz.gets.chomp! until gz.eof? }
  puts "#{i}, #{File.size('./s.gz')}"
  if File.size('./s.gz') > 2058
    i -= 1
  else
    i += 1
  end
end
-:10:in `block (2 levels) in <main>': undefined method `chomp!' for nil:NilClass (NoMethodError)
    from -:10:in `open'
    from -:10:in `block in <main>'
    from -:4:in `times'
    from -:4:in `<main>'

Files

s.gz (2.01 KB) s.gz 生成されたeof?がfalseなのにgetsでnilが返ってくるファイル iehn (Hironao TSUTSUMIDA), 01/02/2017 03:25 AM

History

Updated by naruse (Yui NARUSE) over 2 years ago

たしかにFileとZlib::GzipReaderでeof?の挙動が違いますね。
Fileの方にあわせるべきかなぁ……。

さておき、現状こうなってしまっていますし、修正は2.5からだと思うのでgetsの戻り値で分岐した方がよいでしょうね。

Also available in: Atom PDF