]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
secure-transport: fix recv return code handling
authorStefan Eissing <stefan@eissing.org>
Thu, 9 Mar 2023 10:55:46 +0000 (11:55 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 14 Mar 2023 08:59:27 +0000 (09:59 +0100)
Return code handling of recv calls were not always correct when an error
occured or the connection was closed.

Closes #10717

lib/vtls/sectransp.c

index 8e9198f1aa0e41d21acb82167ea83c5c78bb4837..7f55fb5be7f45746b876a8589e79e3c80d763734 100644 (file)
@@ -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: