Fix sock_recv return handling

This commit is contained in:
2022-11-10 23:51:57 +01:00
parent db053121f2
commit 5e050512ad
2 changed files with 8 additions and 11 deletions

View File

@ -627,7 +627,7 @@ int fastcgi_receive_chunked(fastcgi_conn *conn, sock *client) {
while (1) {
ret = sock_recv(client, tmp, sizeof(tmp), MSG_PEEK);
if (ret < 0) return -2;
if (ret <= 0) return -2;
else if (ret < 2) continue;
int len = 0;
@ -646,12 +646,12 @@ int fastcgi_receive_chunked(fastcgi_conn *conn, sock *client) {
next_len = strtol(tmp, NULL, 16);
ret = sock_recv(client, tmp, len, 0);
if (ret < 0) return -2;
if (ret <= 0) return -2;
if (next_len <= 0) break;
ret = fastcgi_receive(conn, client, next_len);
if (ret < 0) return ret;
if (ret < 0) return (int) ret;
}
return 0;

View File

@ -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 ret;
if (s->enc) {
if (flags & MSG_PEEK) {
ret = SSL_peek(s->ssl, buf, (int) len);
} else {
ret = SSL_read(s->ssl, buf, (int) len);
}
int (*func)(SSL*, void*, int) = (flags & MSG_PEEK) ? SSL_peek : SSL_read;
ret = func(s->ssl, buf, (int) len);
s->_ssl_error = ERR_get_error();
} else {
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) {
next_len = (buf_len < (len - send_len)) ? buf_len : (len - send_len);
ret = sock_recv(src, buf, next_len, 0);
if (ret < 0) return -2;
if (ret <= 0) return -2;
next_len = ret;
ret = sock_send(dst, buf, next_len, send_len + next_len < len ? MSG_MORE : 0);
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) {
ret = sock_recv(src, tmp, sizeof(tmp), MSG_PEEK);
if (ret < 0) return -2;
if (ret <= 0) return -2;
else if (ret < 2) continue;
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);
ret = sock_recv(src, tmp, len, 0);
if (ret < 0) return -2;
if (ret <= 0) return -2;
if (next_len <= 0) break;