projects
/
privoxy.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rebuild HTML docs for 3.0.22 UNSTABLE
[privoxy.git]
/
jbsockets.c
diff --git
a/jbsockets.c
b/jbsockets.c
index
c16e75f
..
0517ee0
100644
(file)
--- a/
jbsockets.c
+++ b/
jbsockets.c
@@
-1,4
+1,4
@@
-const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.1
18 2012/10/21 12:44:58 fabiankeil
Exp $";
+const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.1
23 2013/03/06 21:06:18 diem
Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $
@@
-131,7
+131,7
@@
static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct cli
*
* Parameters :
* 1 : host = hostname to connect to
*
* Parameters :
* 1 : host = hostname to connect to
- * 2 : portnum = port to conne
nt on
(XXX: should be unsigned)
+ * 2 : portnum = port to conne
ct to
(XXX: should be unsigned)
* 3 : csp = Current client state (buffers, headers, etc...)
*
* Returns : JB_INVALID_SOCKET => failure, else it is the socket
* 3 : csp = Current client state (buffers, headers, etc...)
*
* Returns : JB_INVALID_SOCKET => failure, else it is the socket
@@
-278,6
+278,17
@@
static jb_socket rfc2553_connect_to(const char *host, int portnum, struct client
continue;
}
continue;
}
+#ifndef _WIN32
+ if (fd >= FD_SETSIZE)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "Server socket number too high to use select(): %d >= %d",
+ fd, FD_SETSIZE);
+ close_socket(fd);
+ return JB_INVALID_SOCKET;
+ }
+#endif
+
#ifdef TCP_NODELAY
{ /* turn off TCP coalescence */
int mi = 1;
#ifdef TCP_NODELAY
{ /* turn off TCP coalescence */
int mi = 1;
@@
-460,6
+471,17
@@
static jb_socket no_rfc2553_connect_to(const char *host, int portnum, struct cli
return(JB_INVALID_SOCKET);
}
return(JB_INVALID_SOCKET);
}
+#ifndef _WIN32
+ if (fd >= FD_SETSIZE)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "Server socket number too high to use select(): %d >= %d",
+ fd, FD_SETSIZE);
+ close_socket(fd);
+ return JB_INVALID_SOCKET;
+ }
+#endif
+
#ifdef TCP_NODELAY
{ /* turn off TCP coalescence */
int mi = 1;
#ifdef TCP_NODELAY
{ /* turn off TCP coalescence */
int mi = 1;
@@
-740,6
+762,15
@@
void drain_and_close_socket(jb_socket fd)
{
char drainage[500];
{
char drainage[500];
+ if (!data_is_available(fd, 0))
+ {
+ /*
+ * If there is no data available right now, don't try
+ * to drain the socket as read_socket() could block.
+ */
+ break;
+ }
+
bytes_drained = read_socket(fd, drainage, sizeof(drainage));
if (bytes_drained < 0)
{
bytes_drained = read_socket(fd, drainage, sizeof(drainage));
if (bytes_drained < 0)
{
@@
-1003,7
+1034,7
@@
void get_host_information(jb_socket afd, char **ip_address, char **port,
struct sockaddr_in server;
struct hostent *host = NULL;
#endif /* HAVE_RFC2553 */
struct sockaddr_in server;
struct hostent *host = NULL;
#endif /* HAVE_RFC2553 */
-#if defined(_WIN32) || defined(__OS2__) || defined(
__APPLE_CC__) || defined(
AMIGA)
+#if defined(_WIN32) || defined(__OS2__) || defined(AMIGA)
/* according to accept_connection() this fixes a warning. */
int s_length, s_length_provided;
#else
/* according to accept_connection() this fixes a warning. */
int s_length, s_length_provided;
#else
@@
-1041,7
+1072,7
@@
void get_host_information(jb_socket afd, char **ip_address, char **port,
* configured with --disable-ipv6-support.
* The proper fix is to not use NI_MAXSERV in
* that case. It works by accident on other platforms
* configured with --disable-ipv6-support.
* The proper fix is to not use NI_MAXSERV in
* that case. It works by accident on other platforms
- * as <netdb.h> i
n
included unconditionally there.
+ * as <netdb.h> i
s
included unconditionally there.
*/
#ifndef NI_MAXSERV
#define NI_MAXSERV 32
*/
#ifndef NI_MAXSERV
#define NI_MAXSERV 32
@@
-1173,7
+1204,7
@@
int accept_connection(struct client_state * csp, jb_socket fds[])
struct sockaddr_in client;
#endif
jb_socket afd;
struct sockaddr_in client;
#endif
jb_socket afd;
-#if defined(_WIN32) || defined(__OS2__) || defined(
__APPLE_CC__) || defined(
AMIGA)
+#if defined(_WIN32) || defined(__OS2__) || defined(AMIGA)
/* Wierdness - fix a warning. */
int c_length;
#else
/* Wierdness - fix a warning. */
int c_length;
#else
@@
-1277,6
+1308,17
@@
int accept_connection(struct client_state * csp, jb_socket fds[])
}
#endif
}
#endif
+#ifndef _WIN32
+ if (afd >= FD_SETSIZE)
+ {
+ log_error(LOG_LEVEL_ERROR,
+ "Client socket number too high to use select(): %d >= %d",
+ afd, FD_SETSIZE);
+ close_socket(afd);
+ return 0;
+ }
+#endif
+
csp->cfd = afd;
#ifdef HAVE_RFC2553
csp->ip_addr_str = malloc(NI_MAXHOST);
csp->cfd = afd;
#ifdef HAVE_RFC2553
csp->ip_addr_str = malloc(NI_MAXHOST);