[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