Workaround pop3 servers sending empty lines in message lists
[citadel.git] / citadel / modules / pop3client / serv_pop3client.c
index ec744849f8af80e4d6aa4ff34015027349702995..81feca096c9410fc52ac54865480b007e765a2cd 100644 (file)
@@ -332,6 +332,17 @@ eNextState POP3C_GetListOneLine(pop3aggr *RecvMsg)
                return eSendReply;
 
        }
+
+       /*
+        * work around buggy pop3 servers which send
+        * empty lines in their listings.
+       */
+       if ((StrLength(RecvMsg->IO.IOBuf) == 0) ||
+           !isdigit(ChrPtr(RecvMsg->IO.IOBuf)[0]))
+       {
+               return eReadMore;
+       }
+
        OneMsg = (FetchItem*) malloc(sizeof(FetchItem));
        memset(OneMsg, 0, sizeof(FetchItem));
        OneMsg->MSGID = atol(ChrPtr(RecvMsg->IO.IOBuf));
@@ -1083,6 +1094,7 @@ void pop3client_scan_room(struct ctdlroom *qrbuf, void *data, OneRoomNetCfg *One
                    DeletePOP3Aggregator);
 
                pthread_mutex_unlock(&POP3QueueMutex);
+               pLine = pLine->next;
 
        }
 }