Fix sock_recv return handling
This commit is contained in:
@ -627,7 +627,7 @@ int fastcgi_receive_chunked(fastcgi_conn *conn, sock *client) {
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
ret = sock_recv(client, tmp, sizeof(tmp), MSG_PEEK);
|
ret = sock_recv(client, tmp, sizeof(tmp), MSG_PEEK);
|
||||||
if (ret < 0) return -2;
|
if (ret <= 0) return -2;
|
||||||
else if (ret < 2) continue;
|
else if (ret < 2) continue;
|
||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
@ -646,12 +646,12 @@ int fastcgi_receive_chunked(fastcgi_conn *conn, sock *client) {
|
|||||||
|
|
||||||
next_len = strtol(tmp, NULL, 16);
|
next_len = strtol(tmp, NULL, 16);
|
||||||
ret = sock_recv(client, tmp, len, 0);
|
ret = sock_recv(client, tmp, len, 0);
|
||||||
if (ret < 0) return -2;
|
if (ret <= 0) return -2;
|
||||||
|
|
||||||
if (next_len <= 0) break;
|
if (next_len <= 0) break;
|
||||||
|
|
||||||
ret = fastcgi_receive(conn, client, next_len);
|
ret = fastcgi_receive(conn, client, next_len);
|
||||||
if (ret < 0) return ret;
|
if (ret < 0) return (int) ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -72,11 +72,8 @@ long sock_send(sock *s, void *buf, unsigned long len, int flags) {
|
|||||||
long sock_recv(sock *s, void *buf, unsigned long len, int flags) {
|
long sock_recv(sock *s, void *buf, unsigned long len, int flags) {
|
||||||
long ret;
|
long ret;
|
||||||
if (s->enc) {
|
if (s->enc) {
|
||||||
if (flags & MSG_PEEK) {
|
int (*func)(SSL*, void*, int) = (flags & MSG_PEEK) ? SSL_peek : SSL_read;
|
||||||
ret = SSL_peek(s->ssl, buf, (int) len);
|
ret = func(s->ssl, buf, (int) len);
|
||||||
} else {
|
|
||||||
ret = SSL_read(s->ssl, buf, (int) len);
|
|
||||||
}
|
|
||||||
s->_ssl_error = ERR_get_error();
|
s->_ssl_error = ERR_get_error();
|
||||||
} else {
|
} else {
|
||||||
ret = recv(s->socket, buf, len, flags);
|
ret = recv(s->socket, buf, len, flags);
|
||||||
@ -93,7 +90,7 @@ long sock_splice(sock *dst, sock *src, void *buf, unsigned long buf_len, unsigne
|
|||||||
while (send_len < len) {
|
while (send_len < len) {
|
||||||
next_len = (buf_len < (len - send_len)) ? buf_len : (len - send_len);
|
next_len = (buf_len < (len - send_len)) ? buf_len : (len - send_len);
|
||||||
ret = sock_recv(src, buf, next_len, 0);
|
ret = sock_recv(src, buf, next_len, 0);
|
||||||
if (ret < 0) return -2;
|
if (ret <= 0) return -2;
|
||||||
next_len = ret;
|
next_len = ret;
|
||||||
ret = sock_send(dst, buf, next_len, send_len + next_len < len ? MSG_MORE : 0);
|
ret = sock_send(dst, buf, next_len, send_len + next_len < len ? MSG_MORE : 0);
|
||||||
if (ret < 0) return -1;
|
if (ret < 0) return -1;
|
||||||
@ -111,7 +108,7 @@ long sock_splice_chunked(sock *dst, sock *src, void *buf, unsigned long buf_len)
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
ret = sock_recv(src, tmp, sizeof(tmp), MSG_PEEK);
|
ret = sock_recv(src, tmp, sizeof(tmp), MSG_PEEK);
|
||||||
if (ret < 0) return -2;
|
if (ret <= 0) return -2;
|
||||||
else if (ret < 2) continue;
|
else if (ret < 2) continue;
|
||||||
|
|
||||||
int len = 0;
|
int len = 0;
|
||||||
@ -130,7 +127,7 @@ long sock_splice_chunked(sock *dst, sock *src, void *buf, unsigned long buf_len)
|
|||||||
|
|
||||||
next_len = strtol(tmp, NULL, 16);
|
next_len = strtol(tmp, NULL, 16);
|
||||||
ret = sock_recv(src, tmp, len, 0);
|
ret = sock_recv(src, tmp, len, 0);
|
||||||
if (ret < 0) return -2;
|
if (ret <= 0) return -2;
|
||||||
|
|
||||||
if (next_len <= 0) break;
|
if (next_len <= 0) break;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user