File curl-mstp-starttls.patch of Package curl.37295
From f4b8b976b4e8b56050fab353f2ac61e77bbc12b6 Mon Sep 17 00:00:00 2001
From: Stefan Eissing <stefan@eissing.org>
Date: Mon, 15 Jul 2024 11:33:58 +0200
Subject: [PATCH] smtp: for starttls, do full upgrade
- make sure the TLS handshake after a successful STARTTLS command is
fully done before further sending/receiving on the connection.
Reported-by: tomy2105 on github
Fixes #14166
Closes #14190
---
lib/smtp.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/lib/smtp.c b/lib/smtp.c
index ec759982455..5ee1b5ea37a 100644
--- a/lib/smtp.c
+++ b/lib/smtp.c
@@ -1202,6 +1202,7 @@ static CURLcode smtp_statemachine(struct Curl_easy *data,
size_t nread = 0;
/* Busy upgrading the connection; right now all I/O is SSL/TLS, not SMTP */
+upgrade_tls:
if(smtpc->state == SMTP_UPGRADETLS)
return smtp_perform_upgrade_tls(data);
@@ -1238,6 +1239,10 @@ static CURLcode smtp_statemachine(struct Curl_easy *data,
case SMTP_STARTTLS:
result = smtp_state_starttls_resp(data, smtpcode, smtpc->state);
+ /* During UPGRADETLS, leave the read loop as we need to connect
+ * (e.g. TLS handshake) before we continue sending/receiving. */
+ if(!result && (smtpc->state == SMTP_UPGRADETLS))
+ goto upgrade_tls;
break;
case SMTP_AUTH: