]> code.citadel.org Git - citadel.git/blobdiff - citadel/server/modules/imap/imap_misc.c
IMAP memory issues with use of ConstStr
[citadel.git] / citadel / server / modules / imap / imap_misc.c
index e91d748aaa0b1a77aa55697ea9092357757d27cd..e5efc0f1e353e0a3bb9d15cb8d51e6c88e847537 100644 (file)
@@ -264,7 +264,7 @@ void imap_do_append_flags(long new_msgnum, char *new_message_flags) {
  * This function is called by the main command loop.
  */
 void imap_append(int num_parms, ConstStr *Params) {
-       long literal_length;
+       long literal_length=0;
        struct CtdlMessage *msg = NULL;
        long new_msgnum = (-1L);
        int ret = 0;
@@ -282,7 +282,7 @@ void imap_append(int num_parms, ConstStr *Params) {
                return;
        }
 
-       if ( (Params[num_parms-1].Key[0] != '{')
+       if ( !Params[num_parms-1].len || (Params[num_parms-1].Key[0] != '{')
           || (Params[num_parms-1].Key[Params[num_parms-1].len-1] != '}') )  {
                IReply("BAD no message literal supplied");
                return;
@@ -303,7 +303,9 @@ void imap_append(int num_parms, ConstStr *Params) {
         * }
         */
 
-       literal_length = atol(&Params[num_parms-1].Key[1]);
+       if (Params[num_parms-1].len>1) {
+               literal_length = atol(&Params[num_parms-1].Key[1]);
+       }
        if (literal_length < 1) {
                IReply("BAD Message length must be at least 1.");
                return;