commit 3d5539bb63b7f494f20357d7491d96228a432600
Author: Oswald Buddenhagen <[email protected]>
Date: Sat Jun 28 11:58:26 2014 +0200
detect inconsistent state of highest assigned UID
the highest assigned UID must always be at least as high as the highest
actually found UID, as otherwise we'd hand out duplicate UIDs at some
point. also, getting into such a state in the first place indicates some
potentially serious trouble, or at least external interference (e.g.,
moving/copying a message from another folder without giving it a
pristine filename).
REFMAIL: [email protected]
src/drv_maildir.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/src/drv_maildir.c b/src/drv_maildir.c
index 0f58318..0142631 100644
--- a/src/drv_maildir.c
+++ b/src/drv_maildir.c
@@ -787,6 +787,13 @@ maildir_scan( maildir_store_t *ctx, msglist_t *msglist )
#endif
}
uid = entry->uid;
+ if (uid > ctx->nuid) {
+ /* In principle, we could just warn and
top up nuid. However, getting into this
+ * situation might indicate some
serious trouble, so let's not make it worse. */
+ error( "Maildir error: UID %d is beyond
highest assigned UID %d.\n", uid, ctx->nuid );
+ maildir_free_scan( msglist );
+ return DRV_BOX_BAD;
+ }
if ((ctx->gen.opts & OPEN_SIZE) ||
((ctx->gen.opts & OPEN_FIND) && uid >= ctx->newuid))
nfsnprintf( buf + bl, sizeof(buf) - bl,
"%s/%s", subdirs[entry->recent], entry->base );
#ifdef USE_DB
------------------------------------------------------------------------------
Open source business process management suite built on Java and Eclipse
Turn processes into business applications with Bonita BPM Community Edition
Quickly connect people, data, and systems into organized workflows
Winner of BOSSIE, CODIE, OW2 and Gartner awards
http://p.sf.net/sfu/Bonitasoft
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel