diff options
author | ume <ume@FreeBSD.org> | 2012-12-10 19:50:33 +0800 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2012-12-10 19:50:33 +0800 |
commit | 4b8de061ee4ab0c286ba24dd7044cec592a15180 (patch) | |
tree | 13cb0db658fc8841ca2a416a2c9f6145a8b68489 | |
parent | 510edddefcc2dfae776c9c54698ad939ff5cd7e5 (diff) | |
download | freebsd-ports-gnome-4b8de061ee4ab0c286ba24dd7044cec592a15180.tar.gz freebsd-ports-gnome-4b8de061ee4ab0c286ba24dd7044cec592a15180.tar.zst freebsd-ports-gnome-4b8de061ee4ab0c286ba24dd7044cec592a15180.zip |
don't segfault on mailbox close with no user.
Obtained from: http://git.cyrusimap.org/cyrus-imapd/commit/?h=cyrus-imapd-2.4&id=1661683d453ea444aae5832b4a2cb7fd54489672
-rw-r--r-- | mail/cyrus-imapd24/Makefile | 2 | ||||
-rw-r--r-- | mail/cyrus-imapd24/files/patch-imap__statuscache_db.c | 31 |
2 files changed, 32 insertions, 1 deletions
diff --git a/mail/cyrus-imapd24/Makefile b/mail/cyrus-imapd24/Makefile index c719f8d597c8..b21b0ca1f421 100644 --- a/mail/cyrus-imapd24/Makefile +++ b/mail/cyrus-imapd24/Makefile @@ -2,7 +2,7 @@ PORTNAME= cyrus-imapd PORTVERSION= 2.4.17 -#PORTREVISION= 0 +PORTREVISION= 1 CATEGORIES= mail ipv6 MASTER_SITES= ftp://ftp.cyrusimap.org/cyrus-imapd/ \ http://cyrusimap.org/releases/ diff --git a/mail/cyrus-imapd24/files/patch-imap__statuscache_db.c b/mail/cyrus-imapd24/files/patch-imap__statuscache_db.c new file mode 100644 index 000000000000..270fc4b50814 --- /dev/null +++ b/mail/cyrus-imapd24/files/patch-imap__statuscache_db.c @@ -0,0 +1,31 @@ +Index: imap/statuscache_db.c +diff -u -p imap/statuscache_db.c.orig imap/statuscache_db.c +--- imap/statuscache_db.c.orig 2012-12-02 04:57:54.000000000 +0900 ++++ imap/statuscache_db.c 2012-12-10 13:17:11.621360294 +0900 +@@ -150,9 +150,11 @@ static char *statuscache_buildkey(const + + /* Build statuscache key */ + len = strlcpy(key, mailboxname, sizeof(key)); ++ /* double % is a safe separator, it can't exist in a mailboxname */ + key[len++] = '%'; + key[len++] = '%'; +- len += strlcpy(key + len, userid, sizeof(key) - len); ++ if (userid) ++ len += strlcpy(key + len, userid, sizeof(key) - len); + + *keylen = len; + +@@ -410,11 +412,9 @@ int statuscache_invalidate(const char *m + drock.db = statuscachedb; + drock.tid = NULL; + +- key = statuscache_buildkey(mboxname, "", &keylen); ++ key = statuscache_buildkey(mboxname, /*userid*/NULL, &keylen); + +- /* strip off the second NULL that buildkey added, so we match +- * the entires for all users */ +- r = DB->foreach(drock.db, key, keylen - 1, NULL, delete_cb, ++ r = DB->foreach(drock.db, key, keylen, NULL, delete_cb, + &drock, &drock.tid); + if (r != CYRUSDB_OK) { + syslog(LOG_ERR, "DBERROR: error invalidating: %s (%s)", |