mirror of
https://gitea.psi.ch/ELOG/elog.git
synced 2026-09-12 19:33:03 +00:00
Fixed problem with record splitting introduced in FF 10
SVN revision: 2433
This commit is contained in:
parent
8230421618
commit
8d6e8eda31
87
src/elogd.c
87
src/elogd.c
@ -28798,60 +28798,63 @@ void server_loop(void)
|
|||||||
do {
|
do {
|
||||||
|
|
||||||
if (!more_requests) {
|
if (!more_requests) {
|
||||||
FD_ZERO(&readfds);
|
do {
|
||||||
FD_SET(_sock, &readfds);
|
FD_ZERO(&readfds);
|
||||||
timeout.tv_sec = 6;
|
FD_SET(_sock, &readfds);
|
||||||
timeout.tv_usec = 0;
|
timeout.tv_sec = 6;
|
||||||
status = select(FD_SETSIZE, (void *) &readfds, NULL, NULL, (void *) &timeout);
|
timeout.tv_usec = 0;
|
||||||
if (FD_ISSET(_sock, &readfds)) {
|
status = select(FD_SETSIZE, (void *) &readfds, NULL, NULL, (void *) &timeout);
|
||||||
|
if (FD_ISSET(_sock, &readfds)) {
|
||||||
#ifdef HAVE_SSL
|
#ifdef HAVE_SSL
|
||||||
if (_ssl_flag)
|
if (_ssl_flag)
|
||||||
i = SSL_read(_ssl_con, net_buffer + len, net_buffer_size - len);
|
i = SSL_read(_ssl_con, net_buffer + len, net_buffer_size - len);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
i = recv(_sock, net_buffer + len, net_buffer_size - len, 0);
|
i = recv(_sock, net_buffer + len, net_buffer_size - len, 0);
|
||||||
|
|
||||||
} else
|
} else
|
||||||
break;
|
|
||||||
|
|
||||||
/* abort if connection got broken */
|
|
||||||
if (i < 0) {
|
|
||||||
broken = TRUE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (i > 0)
|
|
||||||
len += i;
|
|
||||||
|
|
||||||
/* check if net_buffer needs to be increased */
|
|
||||||
if (len == net_buffer_size) {
|
|
||||||
net_buffer = xrealloc(net_buffer, net_buffer_size + 100000);
|
|
||||||
if (net_buffer == NULL) {
|
|
||||||
sprintf(str,
|
|
||||||
"Error: Cannot increase net_buffer, out of memory, net_buffer_size = %d",
|
|
||||||
net_buffer_size);
|
|
||||||
show_error(str);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
/* abort if connection got broken */
|
||||||
memset(net_buffer + net_buffer_size, 0, 100000);
|
if (i < 0) {
|
||||||
net_buffer_size += 100000;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* abort if 100x received zero bytes */
|
|
||||||
if (i == 0) {
|
|
||||||
n_error++;
|
|
||||||
if (n_error == 100) {
|
|
||||||
broken = TRUE;
|
broken = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
if (i > 0)
|
||||||
|
len += i;
|
||||||
|
|
||||||
|
/* check if net_buffer needs to be increased */
|
||||||
|
if (len == net_buffer_size) {
|
||||||
|
net_buffer = xrealloc(net_buffer, net_buffer_size + 100000);
|
||||||
|
if (net_buffer == NULL) {
|
||||||
|
sprintf(str,
|
||||||
|
"Error: Cannot increase net_buffer, out of memory, net_buffer_size = %d",
|
||||||
|
net_buffer_size);
|
||||||
|
show_error(str);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(net_buffer + net_buffer_size, 0, 100000);
|
||||||
|
net_buffer_size += 100000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* abort if 100x received zero bytes */
|
||||||
|
if (i == 0) {
|
||||||
|
n_error++;
|
||||||
|
if (n_error == 100) {
|
||||||
|
broken = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
/* repeat until empty line received (fragmented TCP packets!) */
|
||||||
|
} while (strstr(net_buffer, "\r\n\r\n") == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we are in pipelining mode, clear this flag now to force a new
|
/* if we are in pipelining mode, clear this flag now to force a new
|
||||||
recv if the request is not complete */
|
recv if the request is not complete */
|
||||||
more_requests = 0;
|
more_requests = 0;
|
||||||
|
|
||||||
/* finish when empty line received */
|
|
||||||
pend = NULL;
|
pend = NULL;
|
||||||
if (strncmp(net_buffer, "GET", 3) == 0 && strncmp(net_buffer, "POST", 4) != 0) {
|
if (strncmp(net_buffer, "GET", 3) == 0 && strncmp(net_buffer, "POST", 4) != 0) {
|
||||||
if (len > 4 && strstr(net_buffer, "\r\n\r\n") != NULL) {
|
if (len > 4 && strstr(net_buffer, "\r\n\r\n") != NULL) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user