[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