diff options
author | Stefan Eissing <stefan@eissing.org> | 2023-03-09 11:55:46 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2023-03-14 09:59:27 +0100 |
commit | 31889210b9fce939f4250bd55fc65817952f491a (patch) | |
tree | 377bd1d3d3b62bc07c2fd05878ec4ef1ec3f530c | |
parent | 06f65f771b52122cf78a6ca3279686679d72bd8e (diff) | |
download | curl-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.c | 12 |
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: |