diff options
author | Daniel Stenberg <daniel@haxx.se> | 2008-05-03 13:43:35 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2008-05-03 13:43:35 +0000 |
commit | b84b71f5241e18ee3e6bde5bdb9d257c71b56d5f (patch) | |
tree | e61aa7648b79b7413dd0437f152472693fd15f64 | |
parent | 3d29bda9f836d21b35110d6a005d56b6931bee6a (diff) |
- Jean-Francois Bertrand reported a libcurl crash with CURLOPT_TCP_NODELAY
since libcurl used getprotobyname() and that isn't thread-safe. We now
switched to use IPPROTO_TCP unconditionally, but perhaps the proper fix is
to detect the thread-safe version of the function and use that.
http://curl.haxx.se/mail/lib-2008-05/0011.html
-rw-r--r-- | CHANGES | 7 | ||||
-rw-r--r-- | RELEASE-NOTES | 5 | ||||
-rw-r--r-- | lib/connect.c | 9 |
3 files changed, 18 insertions, 3 deletions
@@ -7,6 +7,13 @@ Changelog +Daniel Stenberg (3 May 2008) +- Jean-Francois Bertrand reported a libcurl crash with CURLOPT_TCP_NODELAY + since libcurl used getprotobyname() and that isn't thread-safe. We now + switched to use IPPROTO_TCP unconditionally, but perhaps the proper fix is + to detect the thread-safe version of the function and use that. + http://curl.haxx.se/mail/lib-2008-05/0011.html + Daniel Stenberg (1 May 2008) - Bart Whiteley provided a patch that made libcurl work properly when an app uses the CURLOPT_OPENSOCKETFUNCTION callback to create a unix domain socket diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 815e9ed07..10d558787 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -26,7 +26,8 @@ This release includes the following bugfixes: o the typechecker can be bypassed by defining CURL_DISABLE_TYPECHECK o a pointer mixup could make the FTP code send bad user+password under rare circumstances (found when using curlftpfs) - o the CURLOPT_OPENSOCKETFUNCTION can now be used to create a unix domain socket + o CURLOPT_OPENSOCKETFUNCTION can now be used to create a unix domain socket + o CURLOPT_TCP_NODELAY crash due to getprotobyname() use This release includes the following known bugs: @@ -47,6 +48,6 @@ advice from friends like these: Michal Marek, Daniel Fandrich, Scott Barrett, Alexey Simak, Daniel Black, Rafa Muyo, Andre Guibert de Bruet, Brock Noland, Sandor Feldi, Stefan Krause, - David Shaw, Norbert Frese, Bart Whiteley + David Shaw, Norbert Frese, Bart Whiteley, Jean-Francois Bertrand Thanks! (and sorry if I forgot to mention someone) diff --git a/lib/connect.c b/lib/connect.c index dcccfe4d2..33e4e0777 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -685,7 +685,14 @@ static void tcpnodelay(struct connectdata *conn, socklen_t onoff = (socklen_t) data->set.tcp_nodelay; int proto = IPPROTO_TCP; -#ifdef HAVE_GETPROTOBYNAME +#if 0 + /* The use of getprotobyname() is disabled since it isn't thread-safe on + numerous systems. On these getprotobyname_r() should be used instead, but + that exists in at least one 4 arg version and one 5 arg version, and + since the proto number rarely changes anyway we now just use the hard + coded number. The "proper" fix would need a configure check for the + correct function much in the same style the gethostbyname_r versions are + detected. */ struct protoent *pe = getprotobyname("tcp"); if(pe) proto = pe->p_proto; |