aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Eissing <stefan@eissing.org>2023-03-09 11:55:46 +0100
committerDaniel Stenberg <daniel@haxx.se>2023-03-14 09:59:27 +0100
commit31889210b9fce939f4250bd55fc65817952f491a (patch)
tree377bd1d3d3b62bc07c2fd05878ec4ef1ec3f530c
parent06f65f771b52122cf78a6ca3279686679d72bd8e (diff)
downloadcurl-31889210b9fce939f4250bd55fc65817952f491a.tar.gz
secure-transport: fix recv return code handling
Return code handling of recv calls were not always correct when an error occured or the connection was closed. Closes #10717
-rw-r--r--lib/vtls/sectransp.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/vtls/sectransp.c b/lib/vtls/sectransp.c
index 8e9198f1a..7f55fb5be 100644
--- a/lib/vtls/sectransp.c
+++ b/lib/vtls/sectransp.c
@@ -3377,13 +3377,15 @@ static ssize_t sectransp_recv(struct Curl_cfilter *cf,
DEBUGASSERT(backend);
again:
+ *curlcode = CURLE_OK;
err = SSLRead(backend->ssl_ctx, buf, buffersize, &processed);
if(err != noErr) {
switch(err) {
case errSSLWouldBlock: /* return how much we read (if anything) */
- if(processed)
+ if(processed) {
return (ssize_t)processed;
+ }
*curlcode = CURLE_AGAIN;
return -1L;
break;
@@ -3395,7 +3397,7 @@ static ssize_t sectransp_recv(struct Curl_cfilter *cf,
case errSSLClosedGraceful:
case errSSLClosedNoNotify:
*curlcode = CURLE_OK;
- return -1L;
+ return 0;
break;
/* The below is errSSLPeerAuthCompleted; it's not defined in
@@ -3406,8 +3408,10 @@ static ssize_t sectransp_recv(struct Curl_cfilter *cf,
CURLcode result = verify_cert(cf, data, conn_config->CAfile,
conn_config->ca_info_blob,
backend->ssl_ctx);
- if(result)
- return result;
+ if(result) {
+ *curlcode = result;
+ return -1;
+ }
}
goto again;
default: