- 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
This commit is contained in:
Daniel Stenberg 2008-05-03 13:43:35 +00:00
parent 3d29bda9f8
commit b84b71f524
3 changed files with 18 additions and 3 deletions

View File

@ -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

View 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)

View 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;