Ticket #4427 (closed bug: fixed)
hGetBuf sometimes reads fewer bytes than required
|Reported by:||rl||Owned by:||simonmar|
|Type of failure:||Incorrect result at runtime||Difficulty:|
|Test Case:||Blocked By:|
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.