catch server's failure to FETCH *
the query is untypical enough to have caused problems with davmail (when we still used *:*) and mailo.com (until it got fixed), so better check that the result (not) returned by the server makes sense.
This commit is contained in:
		
							parent
							
								
									dfa8c16f27
								
							
						
					
					
						commit
						94022a6752
					
				
					 1 changed files with 15 additions and 3 deletions
				
			
		| 
						 | 
					@ -2404,9 +2404,15 @@ imap_open_box_p3( imap_store_t *ctx, imap_cmd_t *gcmd, int response )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	imap_cmd_open_box_t *cmdp = (imap_cmd_open_box_t *)gcmd;
 | 
						imap_cmd_open_box_t *cmdp = (imap_cmd_open_box_t *)gcmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// This will happen if the box is empty.
 | 
						if (!ctx->uidnext) {
 | 
				
			||||||
	if (!ctx->uidnext)
 | 
							if (ctx->total_msgs) {
 | 
				
			||||||
 | 
								error( "IMAP error: querying server for highest UID failed\n" );
 | 
				
			||||||
 | 
								imap_open_box_p4( ctx, cmdp, RESP_NO );
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// This is ok, the box is simply empty.
 | 
				
			||||||
		ctx->uidnext = 1;
 | 
							ctx->uidnext = 1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	imap_open_box_p4( ctx, cmdp, response );
 | 
						imap_open_box_p4( ctx, cmdp, response );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2983,10 +2989,16 @@ imap_find_new_msgs_p3( imap_store_t *ctx, imap_cmd_t *gcmd, int response )
 | 
				
			||||||
	imap_cmd_find_new_t *cmdp = (imap_cmd_find_new_t *)gcmd;
 | 
						imap_cmd_find_new_t *cmdp = (imap_cmd_find_new_t *)gcmd;
 | 
				
			||||||
	imap_cmd_find_new_t *cmd;
 | 
						imap_cmd_find_new_t *cmd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (response != RESP_OK || ctx->uidnext <= cmdp->uid) {
 | 
						if (response != RESP_OK) {
 | 
				
			||||||
		imap_find_new_msgs_p4( ctx, gcmd, response );
 | 
							imap_find_new_msgs_p4( ctx, gcmd, response );
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						if (!ctx->uidnext) {
 | 
				
			||||||
 | 
							// We are assuming that the new messages were not in fact instantly deleted.
 | 
				
			||||||
 | 
							error( "IMAP error: re-querying server for highest UID failed\n" );
 | 
				
			||||||
 | 
							imap_find_new_msgs_p4( ctx, gcmd, RESP_NO );
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	INIT_IMAP_CMD(imap_cmd_find_new_t, cmd, cmdp->callback, cmdp->callback_aux)
 | 
						INIT_IMAP_CMD(imap_cmd_find_new_t, cmd, cmdp->callback, cmdp->callback_aux)
 | 
				
			||||||
	cmd->out_msgs = cmdp->out_msgs;
 | 
						cmd->out_msgs = cmdp->out_msgs;
 | 
				
			||||||
	imap_exec( (imap_store_t *)ctx, &cmd->gen, imap_find_new_msgs_p4,
 | 
						imap_exec( (imap_store_t *)ctx, &cmd->gen, imap_find_new_msgs_p4,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue