aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-05-03 13:43:35 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-05-03 13:43:35 +0000
commitb84b71f5241e18ee3e6bde5bdb9d257c71b56d5f (patch)
treee61aa7648b79b7413dd0437f152472693fd15f64
parent3d29bda9f836d21b35110d6a005d56b6931bee6a (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--CHANGES7
-rw-r--r--RELEASE-NOTES5
-rw-r--r--lib/connect.c9
3 files changed, 18 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index b180b8156..680a09989 100644
--- 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
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;