hGetBuf sometimes reads fewer bytes than required
The attached program repeatedly calls hGetBuf
and prints how much it wanted to read and how many bytes hGetBuf
returned. It should be run on a sufficiently large file. On Cygwin, the last 4 lines of the output are:
4 4
608 523
4 4
300 300
Note that we requested 608 bytes but hGetBuf
only returned 523 even though we weren't at the end of file (since subsequent reads succeeded).
I suspect the bug is in GHC.IO.Handle.Text.bufReadEmpty
, namely here:
loop :: FD -> Int -> Int -> IO Int
loop fd off bytes | bytes <= 0 = return off
It should probably return so_far + off
.
Trac metadata
Trac field | Value |
---|---|
Version | 7.1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | libraries/base |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |