Actions
Bug #21634
openCombining read(1) with eof? causes dropout of results unexpectedly on Windows.
Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-10-03T08:59:54Z master 5b2ec0eb1b) +PRISM [x64-mingw-ucrt]
Description
On Windows, when reading a file containing EOF(\x1A), using read(1) with IO#eof? causes unexpected dropout of results.
irb(main):001> IO.binwrite("txt", "abcd\x1A")
=> 5
irb(main):002> open("txt", "r") { p _1.read(1) until _1.eof? }; # works fine
"a"
"b"
"c"
"d"
"\x1A"
irb(main):003> open("txt", "rt") { p _1.read(1) until _1.eof? }; # has failure
"b"
"d"
irb(main):004>
The problem disappeared when I commented out one of the following lines (though this will break other things).
- previous_mode = set_binary_mode_with_seek_cur(fptr); in io_read()
- flush_before_seek(fptr, false); in set_binary_mode_with_seek_cur(()
- io_unread(fptr, discard_rbuf); in flush_before_seek()
Within io_unread(), rbuf.len should have changed as 5, 4, 3,... but instead changed as 4, 2,(end).
Since inconsistencies already exist at this point, the problem appears to originate elsewhere.
I found this in ruby master but the same issue was found at least in ruby-1.9.3-p551.
No data to display
Actions
Like0