Ticket #4427 (closed bug: fixed)
hGetBuf sometimes reads fewer bytes than required
| Reported by: | rl | Owned by: | simonmar |
|---|---|---|---|
| Priority: | highest | Milestone: | 7.0.1 |
| Component: | libraries/base | Version: | 7.1 |
| Keywords: | Cc: | ||
| Operating System: | Windows | Architecture: | x86 |
| Type of failure: | Incorrect result at runtime | Difficulty: | |
| Test Case: | Blocked By: | ||
| Blocking: | Related Tickets: |
Description
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.
Attachments
Change History
Note: See
TracTickets for help on using
tickets.

