[GHC] #12010: Incorrect return types for recv() and send() on Windows

GHC ghc-devs at haskell.org
Tue May 3 07:55:49 UTC 2016


#12010: Incorrect return types for recv() and send() on Windows
--------------------------------------+----------------------------------
           Reporter:  enolan          |             Owner:  enolan
               Type:  bug             |            Status:  new
           Priority:  normal          |         Milestone:
          Component:  Core Libraries  |           Version:
           Keywords:                  |  Operating System:  Windows
       Architecture:  x86_64 (amd64)  |   Type of failure:  Runtime crash
          Test Case:                  |        Blocked By:
           Blocking:                  |   Related Tickets:
Differential Rev(s):                  |         Wiki Page:
--------------------------------------+----------------------------------
 They return signed 32 bit ints on Windows, even on a 64 bit OS, rather
 than Linux's 64 bit ssize_t. This means when recv() returned -1 to signal
 an error we thought it was 4294967295. It was converted to an int, -1 and
 the buffer was memcpy'd which caused a segfault. Other bad stuff happened
 with send()s. The problem is in `blockingReadRawBufferPtr` and
 `blockingWriteRawBufferPtr` in `GHC.IO.FD` which are only called in the
 threaded RTS.

 See also note CSsize in System.Posix.Internals.

 I have a patch and a test incoming.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12010>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list