]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tls BIOs: handle BIO_CTRL_EOF correctly
authorStefan Eissing <stefan@eissing.org>
Tue, 3 Jun 2025 09:54:40 +0000 (11:54 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Tue, 3 Jun 2025 14:52:01 +0000 (16:52 +0200)
Needs to return 1 if EOF from underlying filter has been seen.

Fixes #17471
Reported-by: Michael Kaufmann
Closes #17526

lib/vtls/openssl.c
lib/vtls/wolfssl.c

index 69078408865677a0cc83b05f1c5b3dc628c850f3..0ce09ca06b756d8f7fd694142067bbbc3760e1ec 100644 (file)
@@ -698,9 +698,11 @@ static long ossl_bio_cf_ctrl(BIO *bio, int cmd, long num, void *ptr)
     ret = 1;
     break;
 #ifdef BIO_CTRL_EOF
-  case BIO_CTRL_EOF:
+  case BIO_CTRL_EOF: {
     /* EOF has been reached on input? */
-    return !cf->next || !cf->next->connected;
+    struct ssl_connect_data *connssl = cf->ctx;
+    return connssl->peer_closed;
+  }
 #endif
   default:
     ret = 0;
index a19b137092969ca17975deedb1a6626232f989d2..9c6f51826058c08b7307476027a564ad457b737f 100644 (file)
@@ -299,9 +299,11 @@ static long wssl_bio_cf_ctrl(WOLFSSL_BIO *bio, int cmd, long num, void *ptr)
     ret = 1;
     break;
 #ifdef WOLFSSL_BIO_CTRL_EOF
-  case WOLFSSL_BIO_CTRL_EOF:
+  case WOLFSSL_BIO_CTRL_EOF: {
     /* EOF has been reached on input? */
-    return !cf->next || !cf->next->connected;
+    struct ssl_connect_data *connssl = cf->ctx;
+    return connssl->peer_closed;
+  }
 #endif
   default:
     ret = 0;