[GHC] #14262: fdReady cannot wait more than 49 days
GHC
ghc-devs at haskell.org
Wed Sep 20 23:15:53 UTC 2017
#14262: fdReady cannot wait more than 49 days
-------------------------------------+-------------------------------------
Reporter: nh2 | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.2.1
Keywords: | Operating System: Unknown/Multiple
Architecture: x86_64 | Type of failure: None/Unknown
(amd64) |
Test Case: | Blocked By:
Blocking: | Related Tickets: #8684, #13497
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
{{{
import System.IO
hWaitForInput stdin 4294968296
}}}
This code waits for 1 second instead of 49.something days.
The culprit:
{{{
hWaitForInput :: Handle -> Int -> IO Bool
fdReady(..., int msecs, ...)
}}}
Haskell `Int` is usally 64 bits. C `int` is usually 32 bits.
Called here:
{{{
ready :: FD -> Bool -> Int -> IO Bool
ready fd write msecs = do
r <- throwErrnoIfMinus1Retry "GHC.IO.FD.ready" $
fdReady (fdFD fd) (fromIntegral $ fromEnum $ write)
(fromIntegral msecs)
foreign import ccall safe "fdReady"
fdReady :: CInt -> CInt -> CInt -> CInt -> IO CInt
}}}
We `fromIntegral` `Int` to `CInt` (== `Int32`), overflowing.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14262>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list