Mercurial > dovecot > core-2.2
changeset 20897:d589f2e1e20a
lib-storage: Make sure mailbox_uidvalidity_next() doesn't return 0.
0 isn't a valid IMAP UIDVALIDITY, and Dovecot treats 0 as "not assigned".
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Mon, 17 Oct 2016 12:34:36 +0300 |
parents | fbdf07d53d13 |
children | f7e0b7de0540 |
files | src/lib-storage/mailbox-uidvalidity.c |
diffstat | 1 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mailbox-uidvalidity.c Mon Oct 17 21:03:51 2016 +0300 +++ b/src/lib-storage/mailbox-uidvalidity.c Mon Oct 17 12:34:36 2016 +0300 @@ -28,6 +28,8 @@ uid_validity = (uint32_t)ioloop_time; else uid_validity++; + if (uid_validity == 0) + uid_validity = 1; return uid_validity; } @@ -88,6 +90,8 @@ str_printfa(src, ".%08x", *uid_validity); *uid_validity += 1; + if (*uid_validity == 0) + *uid_validity += 1; str_printfa(dest, ".%08x", *uid_validity); if ((ret = rename(str_c(src), str_c(dest))) == 0 || @@ -209,7 +213,8 @@ return mailbox_uidvalidity_next_rescan(list, path); } buf[sizeof(buf)-1] = 0; - if (ret == 0 || str_to_uint32_hex(buf, &cur_value) < 0) { + if (ret == 0 || str_to_uint32_hex(buf, &cur_value) < 0 || + cur_value == 0) { /* broken value */ i_close_fd(&fd); return mailbox_uidvalidity_next_rescan(list, path);