Project

General

Profile

Actions

Bug #13094

closed

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

Added by iehn (Hironao TSUTSUMIDA) about 7 years ago. Updated about 3 years ago.

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

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

Updated by naruse (Yui NARUSE) about 7 years ago

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

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

Updated by jeremyevans0 (Jeremy Evans) over 3 years ago

I've added a pull request to zlib to document this difference in #gets behavior: https://github.com/ruby/zlib/pull/18

Actions #3

Updated by jeremyevans0 (Jeremy Evans) about 3 years ago

  • Status changed from Open to Closed
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0