for (seq = 1; seq <= messages_count; seq++) {
str_truncate(str, 0);
if (mail_cache_lookup_field(cache_view, str, seq,
- cache_idx) > 0) {
- msg.seq = seq;
+ cache_idx) > 0)
msg.uidl = p_strdup(pool, str_c(str));
- array_idx_set(local_msgs, seq-1, &msg);
- }
+ msg.seq = seq;
+ array_idx_set(local_msgs, seq-1, &msg);
}
}
if (lidx >= lcount)
ret = 1;
- else if (ridx >= rcount)
+ else if (ridx >= rcount || lmsg[lidx].uidl == NULL)
ret = -1;
else
ret = strcmp(lmsg[lidx].uidl, rmsg[ridx].uidl);
if (ret < 0) {
- /* message expunged in remote */
+ /* message expunged in remote, or we didn't have a
+ local message's UIDL in cache. */
mail_index_expunge(sync_trans, lseq);
lidx++;
} else if (ret > 0) {