]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
openssl: return -1 on error in the BIO callbacks
authorDaniel Stenberg <daniel@haxx.se>
Mon, 5 Dec 2022 10:29:38 +0000 (11:29 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 6 Dec 2022 08:50:29 +0000 (09:50 +0100)
BIO_read and BIO_write return negative numbers on error, including
retryable ones. A regression from 55807e6. Both branches should be
returning -1.

The APIs are patterned after POSIX read and write which, similarly,
return -1 on errors, not zero, with EAGAIN treated as an error.

Bug: https://github.com/curl/curl/issues/10013#issuecomment-1335308146
Reported-by: David Benjamin
Closes #10021

lib/vtls/openssl.c

index dd7201ac7dacc61344c6476db8ac41bf1d1ac3b1..e7a1caabf7870fadabe06cfee23830284b9974a0 100644 (file)
@@ -713,13 +713,8 @@ static int bio_cf_out_write(BIO *bio, const char *buf, int blen)
   BIO_clear_retry_flags(bio);
   connssl->backend->io_result = result;
   if(nwritten < 0) {
-    if(CURLE_AGAIN == result) {
+    if(CURLE_AGAIN == result)
       BIO_set_retry_write(bio);
-      nwritten = 0;
-    }
-    else {
-      nwritten = -1;
-    }
   }
   return (int)nwritten;
 }
@@ -743,13 +738,8 @@ static int bio_cf_in_read(BIO *bio, char *buf, int blen)
   BIO_clear_retry_flags(bio);
   connssl->backend->io_result = result;
   if(nread < 0) {
-    if(CURLE_AGAIN == result) {
+    if(CURLE_AGAIN == result)
       BIO_set_retry_read(bio);
-      nread = 0;
-    }
-    else {
-      nread = -1;
-    }
   }
   return (int)nread;
 }