From 905e7a34c2cb8f9d7216a00f795a45a9f9d22fa6 Mon Sep 17 00:00:00 2001 From: K1 Date: Thu, 27 Jun 2024 17:30:50 +0800 Subject: [PATCH] Fix ssl3_write_pending, BIO_write returns 0 is considered a success --- ssl/record/rec_layer_s3.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ssl/record/rec_layer_s3.c b/ssl/record/rec_layer_s3.c index 7a97ed404..1b5d05e8e 100644 --- a/ssl/record/rec_layer_s3.c +++ b/ssl/record/rec_layer_s3.c @@ -1160,7 +1160,13 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf, size_t len, SSL_R_BIO_NOT_SET); i = -1; } - if (i > 0 && tmpwrit == SSL3_BUFFER_get_left(&wb[currbuf])) { + + /* + * If zero byte write succeeds, i will be 0 rather than a non-zero + * value. Treat i == 0 as success rather than an error for zero byte + * writes to permit this case. + */ + if (i >= 0 && tmpwrit == SSL3_BUFFER_get_left(&wb[currbuf])) { SSL3_BUFFER_set_left(&wb[currbuf], 0); SSL3_BUFFER_add_offset(&wb[currbuf], tmpwrit); if (currbuf + 1 < s->rlayer.numwpipes)