From e450f66a02d8ec296755e1bfd48bb03d5fcf5d1f Mon Sep 17 00:00:00 2001
From: Steve Holme <steve_holme@hotmail.com>
Date: Tue, 12 Mar 2013 13:09:03 +0000
Subject: [PATCH] pop3: Fixed continuous wait when using --ftp-list

Don't initiate a transfer when using --ftp-list.
---
 lib/pop3.c | 33 ++++++++++++++++++---------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/lib/pop3.c b/lib/pop3.c
index 80cf139b39..34c5964a12 100644
--- a/lib/pop3.c
+++ b/lib/pop3.c
@@ -1085,6 +1085,7 @@ static CURLcode pop3_state_command_resp(struct connectdata *conn,
 {
   CURLcode result = CURLE_OK;
   struct SessionHandle *data = conn->data;
+  struct POP3 *pop3 = data->state.proto.pop3;
   struct pop3_conn *pop3c = &conn->proto.pop3c;
   struct pingpong *pp = &pop3c->pp;
 
@@ -1105,25 +1106,27 @@ static CURLcode pop3_state_command_resp(struct connectdata *conn,
      the strip counter here so that these bytes won't be delivered. */
   pop3c->strip = 2;
 
-  /* POP3 download */
-  Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
+  if(pop3->transfer == FTPTRANSFER_BODY) {
+    /* POP3 download */
+    Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
 
-  if(pp->cache) {
-    /* The header "cache" contains a bunch of data that is actually body
-       content so send it as such. Note that there may even be additional
-       "headers" after the body */
+    if(pp->cache) {
+      /* The header "cache" contains a bunch of data that is actually body
+         content so send it as such. Note that there may even be additional
+         "headers" after the body */
 
-    if(!data->set.opt_no_body) {
-      result = Curl_pop3_write(conn, pp->cache, pp->cache_size);
-      if(result)
-        return result;
-    }
+      if(!data->set.opt_no_body) {
+        result = Curl_pop3_write(conn, pp->cache, pp->cache_size);
+        if(result)
+          return result;
+      }
 
-    /* Free the cache */
-    Curl_safefree(pp->cache);
+      /* Free the cache */
+      Curl_safefree(pp->cache);
 
-    /* Reset the cache size */
-    pp->cache_size = 0;
+      /* Reset the cache size */
+      pp->cache_size = 0;
+    }
   }
 
   /* End of DO phase */
-- 
GitLab