Bug #15199
closedscanf.rb broken with io from IO.pipe (MinGW or Windows?)
Description
scanf.rb seems to be broken when using an io from a pipe.
The following code is used in IO#scanf:
link: https://github.com/ruby/ruby/blob/d4b0efc010a45e904ecdad2dd74374b5c74e61e3/lib/scanf.rb#L661-L664
begin
seek(start_position + matched_so_far, IO::SEEK_SET)
rescue Errno::ESPIPE
end
if the rescue statement is replaced with:
rescue Errno::ESPIPE, Errno::EINVAL
It seems to work. I assume at some point, a 'pipe' io raised an Errno::ESPIPE error when called with #seek, but trunk & 2.3 respond with Errno::EINVAL...
Updated by MSP-Greg (Greg L) about 6 years ago
- Subject changed from scanf.rb broken with io from IO.pipe to scanf.rb broken with io from IO.pipe (MinGW or Windows?)
Updated by nagachika (Tomoyuki Chikanaga) about 6 years ago
- Backport changed from 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN to 2.3: REQUIRED, 2.4: REQUIRED, 2.5: REQUIRED
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
I've tested on Windows and confirmed this is a bug.
I added a pull request upstream to fix this: https://github.com/ruby/scanf/pull/4
If nobody has objections, I'll merge this in about a week.
Updated by jeremyevans0 (Jeremy Evans) over 5 years ago
- Status changed from Open to Closed
Pull request merged: https://github.com/ruby/scanf/commit/50f3b58ea0b56df436025e77669413622d544fbf
Updated by usa (Usaku NAKAMURA) over 5 years ago
- Backport changed from 2.3: REQUIRED, 2.4: REQUIRED, 2.5: REQUIRED to 2.3: REQUIRED, 2.4: REQUIRED, 2.5: DONE
ruby_2_5 r67754 merged revision(s) d118c84b0b9110462e479487ffaf175a75e5718e.
Updated by nobu (Nobuyoshi Nakada) over 5 years ago
- Related to Bug #12230: Wrong exception raised when IO.read from a pipe is passed an offset on Windows added