From: wyhaines@...
Date: 2021-03-07T00:55:01+00:00
Subject: [ruby-core:102763] [Ruby master Bug#17661] IO#each will segfault when if file is closed inside an `each_byte` block

Issue #17661 has been updated by wyhaines (Kirk Haines).


Aaron filed this bug on my behalf, as I was having issues with my account. Those issues appear to be issues no more, however.

In the interest of having details appear in the issue tracker and not just on GitHub, I'll reiterate the description of the fix:

I have fixed the problem by adding a check inside the inner loop that iterates over the filehandle read buffer, and I have added a spec that will both expose the bug in an unfixed ruby, and pass in a fixed ruby.

The bug exists on every build of Ruby that I have available on my systems, and in looking at the history of io.c, it likely exists all the way back to 1.9.1.

----------------------------------------
Bug #17661: IO#each will segfault when if file is closed inside an `each_byte` block
https://bugs.ruby-lang.org/issues/17661#change-90781

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
* Priority: Normal
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
As reported here: https://twitter.com/asterite/status/1363487990203506689 when iterating through a file's contents with #each_byte, if the filehandle is closed inside of the block yielded to by #each byte, this condition is not detected, and a segmentation fault is thrown.

Repro:

```ruby
file = http://File.open(__FILE__)
file.each_byte do |byte|
  p byte
  file.close
end
```

Proposed fix is here: https://github.com/ruby/ruby/pull/4217



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>