]> git.feebdaed.xyz Git - 0xmirror/curl.git/commitdiff
ftp: return better on OOM in two places
authorDaniel Stenberg <daniel@haxx.se>
Thu, 25 Dec 2025 22:17:24 +0000 (23:17 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 26 Dec 2025 09:48:41 +0000 (10:48 +0100)
Found with strict torture testing.

Closes #20099

lib/ftp.c

index 46a309873cc84183522393401f5c008d75199ca7..650c2ee9924c188fa99d976424329e32ac21623f 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -1941,7 +1941,8 @@ static CURLcode ftp_state_pasv_resp(struct Curl_easy *data,
                            CURL_CF_SSL_ENABLE : CURL_CF_SSL_DISABLE);
 
   if(result) {
-    if(ftpc->count1 == 0 && ftpcode == 229) {
+    if((result != CURLE_OUT_OF_MEMORY) &&
+       (ftpc->count1 == 0) && (ftpcode == 229)) {
       curlx_free(newhost);
       return ftp_epsv_disable(data, ftpc, conn);
     }
@@ -3552,6 +3553,8 @@ static CURLcode ftp_do_more(struct Curl_easy *data, int *completep)
   if(conn->cfilter[SECONDARYSOCKET]) {
     bool is_eptr = Curl_conn_is_tcp_listen(data, SECONDARYSOCKET);
     result = Curl_conn_connect(data, SECONDARYSOCKET, FALSE, &connected);
+    if(result == CURLE_OUT_OF_MEMORY)
+      return result;
     if(result || (!connected && !is_eptr &&
                   !Curl_conn_is_ip_connected(data, SECONDARYSOCKET))) {
       if(result && !is_eptr && (ftpc->count1 == 0)) {