]> granicus.if.org Git - curl/commitdiff
- Jean-Francois Bertrand reported a libcurl crash with CURLOPT_TCP_NODELAY
authorDaniel Stenberg <daniel@haxx.se>
Sat, 3 May 2008 13:43:35 +0000 (13:43 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 3 May 2008 13:43:35 +0000 (13:43 +0000)
  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

CHANGES
RELEASE-NOTES
lib/connect.c

diff --git a/CHANGES b/CHANGES
index b180b8156978c53f45dc0272fd6d307129a6e7e8..680a09989e7d6295b13ef5391c2bd21fdec61cb8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -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
index 815e9ed07e18bb6a6335f24991a0e9bdcf13cb2b..10d558787e2fb65c2c57bf255561c4b5da0ba49c 100644 (file)
@@ -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)
index dcccfe4d2b7e0cc93a711949434d5c087bc471a4..33e4e077722a7be1f175eb86123826abe214148f 100644 (file)
@@ -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;