imap: Added required mailbox check for FETCH and APPEND commands
authorJiri Hruska <jirka@fud.cz>
Sun, 3 Mar 2013 10:37:10 +0000 (11:37 +0100)
committerSteve Holme <steve_holme@hotmail.com>
Sun, 3 Mar 2013 16:39:50 +0000 (16:39 +0000)
lib/imap.c

index 6ed887a..cf27d60 100644 (file)
@@ -693,7 +693,7 @@ static CURLcode imap_select(struct connectdata *conn)
   Curl_safefree(imapc->mailbox_uidvalidity);
 
   /* Make sure the mailbox is in the correct atom format */
-  mailbox = imap_atom(imap->mailbox ? imap->mailbox : "");
+  mailbox = imap_atom(imap->mailbox);
   if(!mailbox)
     result = CURLE_OUT_OF_MEMORY;
   else
@@ -1867,6 +1867,7 @@ static CURLcode imap_perform(struct connectdata *conn, bool *connected,
 static CURLcode imap_do(struct connectdata *conn, bool *done)
 {
   CURLcode result = CURLE_OK;
+  struct IMAP *imap;
 
   *done = FALSE; /* default to false */
 
@@ -1879,6 +1880,8 @@ static CURLcode imap_do(struct connectdata *conn, bool *done)
   if(result)
     return result;
 
+  imap = conn->data->state.proto.imap;
+
   /* Parse the URL path */
   result = imap_parse_url_path(conn);
   if(result)
@@ -1889,6 +1892,12 @@ static CURLcode imap_do(struct connectdata *conn, bool *done)
   if(result)
     return result;
 
+  /* Check we have a mailbox for FETCH and APPEND commands */
+  if(!imap->custom && !imap->mailbox) {
+    failf(conn->data, "FETCH and APPEND require a mailbox.");
+    return CURLE_URL_MALFORMAT;
+  }
+
   result = imap_regular_transfer(conn, done);
 
   return result;