aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorume <ume@FreeBSD.org>2012-12-10 19:50:33 +0800
committerume <ume@FreeBSD.org>2012-12-10 19:50:33 +0800
commit4b8de061ee4ab0c286ba24dd7044cec592a15180 (patch)
tree13cb0db658fc8841ca2a416a2c9f6145a8b68489 /mail
parent510edddefcc2dfae776c9c54698ad939ff5cd7e5 (diff)
downloadfreebsd-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
Diffstat (limited to 'mail')
-rw-r--r--mail/cyrus-imapd24/Makefile2
-rw-r--r--mail/cyrus-imapd24/files/patch-imap__statuscache_db.c31
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)",