projects
/
privoxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix a theoretical memory leak in a cannot-realistically-happen situation in rfc2553_c...
[privoxy.git]
/
jbsockets.c
diff --git
a/jbsockets.c
b/jbsockets.c
index
5d428f6
..
efc344c
100644
(file)
--- a/
jbsockets.c
+++ b/
jbsockets.c
@@
-1,4
+1,4
@@
-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.
89 2011/03/27 13:56:48
fabiankeil Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.
96 2011/03/27 14:03:43
fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
@@
-8,7
+8,7
@@
const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.89 2011/03/27 13:56:48 fabian
* OS-independent. Contains #ifdefs to make this work
* on many platforms.
*
* OS-independent. Contains #ifdefs to make this work
* on many platforms.
*
- * Copyright : Written by and Copyright (C) 2001-201
0
the
+ * Copyright : Written by and Copyright (C) 2001-201
1
the
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
* Privoxy team. http://www.privoxy.org/
*
* Based on the Internet Junkbuster originally written
@@
-147,6
+147,11
@@
jb_socket connect_to(const char *host, int portnum, struct client_state *csp)
do
{
do
{
+ /*
+ * XXX: The whole errno overloading is ridiculous and should
+ * be replaced with something sane and thread safe
+ */
+ /* errno = 0;*/
#ifdef HAVE_RFC2553
fd = rfc2553_connect_to(host, portnum, csp);
#else
#ifdef HAVE_RFC2553
fd = rfc2553_connect_to(host, portnum, csp);
#else
@@
-175,12
+180,17
@@
static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
int retval;
jb_socket fd;
fd_set wfds;
int retval;
jb_socket fd;
fd_set wfds;
- struct timeval t
v[1]
;
+ struct timeval t
imeout
;
#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
int flags;
#endif
int connect_failed;
#if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) && !defined(__OS2__)
int flags;
#endif
int connect_failed;
- int socket_error;
+ /*
+ * XXX: Initializeing it here is only necessary
+ * because not all situations are properly
+ * covered yet.
+ */
+ int socket_error = 0;
#ifdef FEATURE_ACL
struct access_control_addr dst[1];
#ifdef FEATURE_ACL
struct access_control_addr dst[1];
@@
-222,6
+232,7
@@
static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
csp->http->host_ip_addr_str = malloc(NI_MAXHOST);
if (NULL == csp->http->host_ip_addr_str)
{
csp->http->host_ip_addr_str = malloc(NI_MAXHOST);
if (NULL == csp->http->host_ip_addr_str)
{
+ freeaddrinfo(result);
log_error(LOG_LEVEL_ERROR,
"Out of memory while getting the server IP address.");
return JB_INVALID_SOCKET;
log_error(LOG_LEVEL_ERROR,
"Out of memory while getting the server IP address.");
return JB_INVALID_SOCKET;
@@
-249,16
+260,16
@@
static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
if (retval)
{
log_error(LOG_LEVEL_ERROR,
if (retval)
{
log_error(LOG_LEVEL_ERROR,
- "
Can not save csp->http->host_ip_addr_str
: %s",
+ "
Failed to get the host name from the socket structure
: %s",
gai_strerror(retval));
continue;
}
gai_strerror(retval));
continue;
}
+ fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
#ifdef _WIN32
#ifdef _WIN32
- if ((fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol)) ==
- JB_INVALID_SOCKET)
+ if (fd == JB_INVALID_SOCKET)
#else
#else
- if (
(fd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol))
< 0)
+ if (
fd
< 0)
#endif
{
continue;
#endif
{
continue;
@@
-319,11
+330,11
@@
static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
FD_ZERO(&wfds);
FD_SET(fd, &wfds);
FD_ZERO(&wfds);
FD_SET(fd, &wfds);
-
tv->tv_sec = 30
;
- t
v->tv_usec =
0;
+
memset(&timeout, 0, sizeof(timeout))
;
+ t
imeout.tv_sec = 3
0;
/* MS Windows uses int, not SOCKET, for the 1st arg of select(). Wierd! */
/* MS Windows uses int, not SOCKET, for the 1st arg of select(). Wierd! */
- if ((select((int)fd + 1, NULL, &wfds, NULL,
tv
) > 0)
+ if ((select((int)fd + 1, NULL, &wfds, NULL,
&timeout
) > 0)
&& FD_ISSET(fd, &wfds))
{
socklen_t optlen = sizeof(socket_error);
&& FD_ISSET(fd, &wfds))
{
socklen_t optlen = sizeof(socket_error);
@@
-426,10
+437,11
@@
static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct cli
}
#endif /* ndef _WIN32 */
}
#endif /* ndef _WIN32 */
+ fd = socket(inaddr.sin_family, SOCK_STREAM, 0);
#ifdef _WIN32
#ifdef _WIN32
- if (
(fd = socket(inaddr.sin_family, SOCK_STREAM, 0))
== JB_INVALID_SOCKET)
+ if (
fd
== JB_INVALID_SOCKET)
#else
#else
- if (
(fd = socket(inaddr.sin_family, SOCK_STREAM, 0))
< 0)
+ if (
fd
< 0)
#endif
{
return(JB_INVALID_SOCKET);
#endif
{
return(JB_INVALID_SOCKET);