From: Amos Jeffries Date: Mon, 12 May 2008 02:31:23 +0000 (+1200) Subject: Author: Finn Thain X-Git-Tag: SQUID_3_0_STABLE6~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a51e6c6cd7f4d4359b72dfcba5080822fb02709b;p=thirdparty%2Fsquid.git Author: Finn Thain Bug 2332: segfault in tunnelConnectTimeout() Fixes at least one race condition. If tunnelConnectTimeout() is called before tunnelPeerSelectComplete(), then tunnelState->servers will be NULL. --- diff --git a/src/tunnel.cc b/src/tunnel.cc index da4fdcb6d8..741585d365 100644 --- a/src/tunnel.cc +++ b/src/tunnel.cc @@ -465,16 +465,18 @@ tunnelConnectTimeout(int fd, void *data) HttpRequest *request = tunnelState->request; ErrorState *err = NULL; - if (tunnelState->servers->_peer) - hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, - tunnelState->servers->_peer->host); - else if (Config.onoff.log_ip_on_direct) - hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, - fd_table[tunnelState->server.fd()].ipaddr); - else - hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, - tunnelState->host); - + if (tunnelState->servers) { + if (tunnelState->servers->_peer) + hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, + tunnelState->servers->_peer->host); + else if (Config.onoff.log_ip_on_direct) + hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, + fd_table[tunnelState->server.fd()].ipaddr); + else + hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, + tunnelState->host); + } else + debugs(26, 1, "tunnelConnectTimeout(): tunnelState->servers is NULL"); err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, request);