summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Varshavchik2022-01-15 23:14:47 -0500
committerSam Varshavchik2022-01-15 23:44:03 -0500
commit9457c2f56c7c8402d83153965a0951dafc2a4d18 (patch)
tree43f8c38a863929a560f549b8b7ca57733899cce6
parent6d54a8a93311b6bb0eedae79cf4bde01d0955708 (diff)
downloadcourier-libs-9457c2f56c7c8402d83153965a0951dafc2a4d18.tar.bz2
Fix minor memory leaks
-rw-r--r--imap/Makefile.am13
-rw-r--r--imap/imapd.c4
-rw-r--r--imap/mailboxlist.c5
-rw-r--r--imap/smaptestsuite45
-rw-r--r--imap/storeinfo.c15
-rwxr-xr-ximap/testsuite70
-rw-r--r--imap/testsuitevalgrind5
-rw-r--r--maildir/maildirquota.c2
8 files changed, 101 insertions, 58 deletions
diff --git a/imap/Makefile.am b/imap/Makefile.am
index a363bc1..5d6b90d 100644
--- a/imap/Makefile.am
+++ b/imap/Makefile.am
@@ -13,6 +13,7 @@ CLEANFILES=imapd.8 imapd.html mkimapdcert.html mkimapdcert.8 \
courierpop3d.html courierpop3d.8 mkpop3dcert.html mkpop3dcert.8
EXTRA_DIST=testsuite testsuite.txt smaptestsuite smaptestsuite.txt \
+ testsuitevalgrind \
BUGS BUGS.html README README.html imapd.authpam \
pop3d.authpam system-auth.authpam system-auth2.authpam\
makeimapaccess.8.in makeimapaccess.html.in \
@@ -212,6 +213,18 @@ check-am:
@chmod +x testsuitefix.pl
LC_ALL=C; export LC_ALL; $(srcdir)/testsuite | ./testsuitefix.pl | sort | cmp -s - $(srcdir)/testsuite.txt
LC_ALL=C; export LC_ALL; test "@smap@" = "yes" || exit 0; @SHELL@ $(srcdir)/smaptestsuite | ./testsuitefix.pl | sort | cmp -s - $(srcdir)/smaptestsuite.txt
+ VALGRIND="`which valgrind`"; test "$$VALGRIND" != "" || exit 0; \
+ LC_ALL=C; export LC_ALL; \
+ rm -f confmdtesterror; \
+ IMAPINVOKE='@SHELL@ $(srcdir)/testsuitevalgrind ./imapd'; export IMAPINVOKE; \
+ @SHELL@ -x $(srcdir)/testsuite 2>&1 | tee confmderror.txt; test -f confmdtesterror || exit 0; exit 1
+ VALGRIND="`which valgrind`"; test "$$VALGRIND" != "" || exit 0; \
+ LC_ALL=C; export LC_ALL; \
+ rm -f confmdtesterror; \
+ IMAPINVOKE='@SHELL@ $(srcdir)/testsuitevalgrind ./imapd'; export IMAPINVOKE; \
+ @SHELL@ -x $(srcdir)/smaptestsuite 2>&1 | tee confmderror.txt; test -f confmdtesterror || exit 0; exit 1
+
+ rm -f confmdtesterror confmderror.txt
rm -rf confmdtest
testsuite-imap:
diff --git a/imap/imapd.c b/imap/imapd.c
index 55e17ab..c0a4aa9 100644
--- a/imap/imapd.c
+++ b/imap/imapd.c
@@ -3850,7 +3850,10 @@ int do_folder_delete(char *mailbox_name)
}
if (acl_read_folder(&l, mi.homedir, mi.maildir) < 0)
+ {
+ maildir_info_destroy(&mi);
return -1;
+ }
if (strcasecmp(mi.maildir, INBOX))
{
@@ -3875,6 +3878,7 @@ int do_folder_delete(char *mailbox_name)
free(p);
}
maildir_aclt_list_destroy(&l);
+ maildir_info_destroy(&mi);
return -1;
}
diff --git a/imap/mailboxlist.c b/imap/mailboxlist.c
index 41c873e..ce6cf55 100644
--- a/imap/mailboxlist.c
+++ b/imap/mailboxlist.c
@@ -96,7 +96,8 @@ const char *maildir_shared_index_file()
if (p && *p)
{
- const char *q=auth_getoptionenv("sharedgroup");
+ char *opt=auth_getoptionenv("sharedgroup");
+ const char *q=opt;
if (!q) q="";
@@ -106,6 +107,8 @@ const char *maildir_shared_index_file()
write_error_exit(0);
strcat(strcpy(filenamep, p), q);
+ if (opt)
+ free(opt);
}
}
diff --git a/imap/smaptestsuite b/imap/smaptestsuite
index 77e012a..4962027 100644
--- a/imap/smaptestsuite
+++ b/imap/smaptestsuite
@@ -1,3 +1,8 @@
+if test "$IMAPINVOKE" = ""
+then
+ IMAPINVOKE="./imapd"
+fi
+
SED='s/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g;s/SNAPSHOT "[^"]*"/SNAPSHOT -SNAPSHOT-/g;s/SNAPSHOTEXISTS "[^"]*"/SNAPSHOTEXISTS -SNAPSHOT-/g;s:^-ERR .*:-ERR --error--:'
rm -rf confmdtest
@@ -13,7 +18,7 @@ EOF
i=`expr $i + 1`
done
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
OPEN INBOX
STORE 1-10 20-80 90-130 +FLAGS=DELETED
EXPUNGE
@@ -33,7 +38,7 @@ EOF
i=`expr $i + 1`
done
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
OPEN INBOX
EXPUNGE 1-10 20-80 90-130
LOGOUT
@@ -76,7 +81,7 @@ Attached message
--aaa--
EOF
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
OPEN INBOX
FETCH 1 CONTENTS.PEEK=MIME(Mime-Version,Content-Type,Content-Disposition)
FETCH 1 CONTENTS=MIME(Mime-Version,Content-Type,Content-Disposition)
@@ -172,7 +177,7 @@ IG1zZ2VudmVsb3BlLmMK
--zzz--
EOF
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
open INBOX
FETCH 1 CONTENTS=BODY[1.1]
FETCH 1 CONTENTS=BODY.DECODED[1.1]
@@ -210,7 +215,7 @@ LOGOUT
EOF
rm -f confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
open INBOX
COPY 1-10 "" INBOX
NOOP
@@ -242,9 +247,9 @@ do
n=`expr $n + 1`
done
echo "LOGOUT"
-) | env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd | sed "$SED"
+) | env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE | sed "$SED"
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
open INBOX
SEARCH UNMARKED NOT DELETED
SEARCH MARKED NOT DELETED
@@ -304,7 +309,7 @@ Content-Type: text/plain
Test
EOF
-env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
open INBOX
COPY 1 "" INBOX
NOOP
@@ -316,13 +321,13 @@ MOVE 2 "" INBOX a
LOGOUT
EOF
cat confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
open INBOX a
LOGOUT
EOF
cat confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
sopen "" INBOX a
NOOP
NOOP
@@ -343,7 +348,7 @@ LOGOUT
EOF
echo `ls confmdtest/.a/courierimapsnapshots | wc -l`
-env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
delete INBOX a
sopen "" INBOX
NOOP
@@ -383,7 +388,7 @@ EOF
echo `ls confmdtest/courierimapsnapshots | wc -l`
touch -t 199901010000 `ls confmdtest/courierimapsnapshots/* | sed -n 1p`
-env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
sopen "" INBOX
CLOSE
LOGOUT
@@ -413,7 +418,7 @@ Mary had a little lamb, its fleece was white as snow.
test message
EOF
-env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
open INBOX
FETCH 1 CONTENTS=HEADERS
FETCH 1 CONTENTS=RAWHEADERS
@@ -428,7 +433,7 @@ FETCH 1 CONTENTS=MIME(:MIME)
LOGOUT
EOF
-env IMAP_KEYWORDS=1 IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF >testsuite.tmp
+env IMAP_KEYWORDS=1 IMAP_BROKENUIDV=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF >testsuite.tmp
open INBOX
CREATE INBOX a
COPY 1 "" INBOX a
@@ -462,7 +467,7 @@ SNAPSHOT=`fgrep '* SNAPSHOT ' testsuite.tmp | cut -c12-`
sed "$SED" <testsuite.tmp
rm -f testsuite.tmp
-env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
SOPEN $SNAPSHOT INBOX a
COPY 1 "" INBOX a
NOOP
@@ -478,20 +483,20 @@ SEARCH UNMARKED NOT KEYWORD -Label3
LOGOUT
EOF
-env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
OPEN INBOX
STORE 1 KEYWORDS=Junk*Junk
LOGOUT
EOF
-env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/'
+env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/'
a1 SELECT INBOX
a2 FETCH 1 FLAGS
a3 STORE 1 FLAGS (\Seen Abra,Cadabra)
a3 LOGOUT
EOF
-env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
OPEN INBOX
FETCH 1 FLAGS KEYWORDS
COPY 1 "" INBOX
@@ -523,7 +528,7 @@ echo "confmdtest3 1 1 `pwd` confmdtest3" >confmdtest4/indexb || exit 1
IMAP_SHAREDINDEXFILE=`pwd`/confmdtest4/index
export IMAP_SHAREDINDEXFILE
-env AUTHENTICATED=confmdtest IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env AUTHENTICATED=confmdtest IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
LIST public
LIST public a
LIST public b
@@ -656,7 +661,7 @@ test message
EOF
n=`expr $n + 1`
done
-env AUTHENTICATED=confmdtest IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 ./imapd <<EOF | sed "$SED"
+env AUTHENTICATED=confmdtest IMAP_BROKENUIDV=1 IMAP_KEYWORDS=1 MOVE_EXPUNGE_TO_TRASH=1 MAILDIR=confmdtest PROTOCOL=SMAP1 $IMAPINVOKE <<EOF | sed "$SED"
OPEN INBOX
EXPUNGE
LOGOUT
diff --git a/imap/storeinfo.c b/imap/storeinfo.c
index de885e9..cc31c31 100644
--- a/imap/storeinfo.c
+++ b/imap/storeinfo.c
@@ -221,6 +221,7 @@ int kwAllowed=1;
else
{
struct libmail_kwMessage *kw;
+ struct libmail_kwMessage *si_kw;
new_flags=si->flags;
@@ -229,12 +230,16 @@ int kwAllowed=1;
if (kw && kw->firstEntry == NULL)
kw=NULL;
- if (si->keywords && si->keywords->firstEntry == NULL)
- si->keywords=NULL;
+ si_kw=si->keywords;
+
+ if (si_kw && si_kw->firstEntry == NULL)
+ {
+ si_kw=NULL;
+ }
- if ((si->keywords && !kw) ||
- (!si->keywords && kw) ||
- (si->keywords && kw && libmail_kwmCmp(si->keywords, kw)))
+ if ((si_kw && !kw) ||
+ (!si_kw && kw) ||
+ (si_kw && kw && libmail_kwmCmp(si_kw, kw)))
{
if (kwAllowed)
{
diff --git a/imap/testsuite b/imap/testsuite
index 1283f28..37a264b 100755
--- a/imap/testsuite
+++ b/imap/testsuite
@@ -17,6 +17,11 @@ test ! -d confmdtest2 || chmod -R u+rwx confmdtest2
rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
+if test "$IMAPINVOKE" = ""
+then
+ IMAPINVOKE="./imapd"
+fi
+
cat >confmdtest/cur/msg1:2,S <<EOF || exit 1
From: John <john@example.com>
To: Steve <steve@example.com>, Tom <tom@example.com>
@@ -116,7 +121,7 @@ else
initinbox="inbox.$initinbox"
fi
-env IMAP_BROKENUIDV=1 MAILDIR=$initdir ./imapd >confmdtest.stdout <<EOF
+env IMAP_BROKENUIDV=1 MAILDIR=$initdir $IMAPINVOKE >confmdtest.stdout <<EOF
a001 select $initinbox
a logout
EOF
@@ -125,7 +130,7 @@ EOF
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
a001 select inbox
a002 fetch 1 (bodystructure)
a003 fetch 1 (body[])
@@ -222,7 +227,7 @@ touch -t 199901010000 confmdtest/new/msg3
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
b000 status inbox ( MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
b001 select inbox
b001a status inbox ( MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
@@ -266,7 +271,8 @@ b030 select inbox
b031 fetch 2 (bodystructure)
adone logout
EOF
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
foo select inbox.bozo
foo store 1 +flags \Deleted
foo expunge
@@ -278,7 +284,7 @@ mkdir confmdtest/tmp || exit 1
mkdir confmdtest/cur || exit 1
mkdir confmdtest/new || exit 1
echo "10000S,2C" >confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
c001 select inbox
c002 append inbox {5}
test
@@ -308,7 +314,7 @@ mkdir confmdtest/tmp || exit 1
mkdir confmdtest/cur || exit 1
mkdir confmdtest/new || exit 1
echo "10000S,5C" >confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
d001 select inbox
d002 append inbox {5}
test
@@ -319,7 +325,7 @@ d005 noop
ddone logout
EOF
cat confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
e001 select inbox
e002 copy 1:2 inbox
e003 noop
@@ -328,7 +334,7 @@ EOF
cat confmdtest/maildirsize
../maildir/maildirmake -f Trash confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
f001 select inbox
f002 copy 1:2 inbox
f002 copy 1:2 inbox.Trash
@@ -343,7 +349,7 @@ fdone logout
EOF
cat confmdtest/maildirsize
echo "Counts:" `ls confmdtest/cur | wc -l` `ls confmdtest/.Trash/cur | wc -l`
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
g001 select inbox
g002 select Trash
g003 select INBOX.Trash
@@ -367,7 +373,7 @@ chmod u-rwx confmdtest2/.b/cur
echo "test `pwd`/confmdtest2" >confmdtest/shared-maildirs
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
h001 list "" "*"
h002 list "" "%"
h003 list "" "%.%"
@@ -422,19 +428,19 @@ EOF
../maildir/maildirmake -f c confmdtest
../maildir/maildirmake -f Trash confmdtest2
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
ii001 list "" "*"
ii002 list "" "*"
iidone logout
EOF
-env IMAP_BROKENUIDV=1 IMAP_CHECK_ALL_FOLDERS=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 IMAP_CHECK_ALL_FOLDERS=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
ii003 list "" "*"
ii004 list "" "*"
iidone logout
EOF
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
i001 select shared.test.b
i002 select shared.test.a
i003 close
@@ -518,7 +524,7 @@ EOF
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
T001 select INBOX
T002 fetch 1:* (uid body[header.fields(date)])
T003 THREAD ORDEREDSUBJECT US-ASCII ALL
@@ -539,7 +545,7 @@ EOF
rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
../maildir/maildirmake -f Trash confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
J001 list "" "*"
J002 lsub "" "*"
J003 SUBSCRIBE INBOX
@@ -624,7 +630,7 @@ EOF
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
K001 select INBOX
K002 THREAD REFERENCES US-ASCII ALL
KDONE logout
@@ -634,7 +640,7 @@ rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
../maildir/maildirmake -f Trash confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
L001 CREATE INBOX.a
L002 CREATE INBOX.a.a
L003 CREATE INBOX.aa
@@ -676,7 +682,7 @@ rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
../maildir/maildirmake -q 10C confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
M001 CREATE INBOX.a
M002 APPEND INBOX \Seen {5}
test
@@ -690,7 +696,7 @@ M008 RENAME INBOX.a INBOX.b
MDONE logout
EOF
cat confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
M009 DELETE INBOX.b
MDONE logout
EOF
@@ -699,7 +705,7 @@ cat confmdtest/maildirsize
rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
-env IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
N001 LIST "" "*"
N002 append inbox \Deleted {11}
test
@@ -716,7 +722,7 @@ EOF
rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
../maildir/maildirmake -q10C confmdtest
-env IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
O001 append inbox NIL {11}
test
@@ -733,7 +739,7 @@ EOF
cat confmdtest/maildirsize
rm -f confmdtest/maildirsize
-env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
p001 SELECT INBOX
p002 CREATE INBOX.a
p003 COPY 1 INBOX.a
@@ -769,7 +775,7 @@ P026 SEARCH KEYWORD -Label2 KEYWORD -Label1
pDONE LOGOUT
EOF
-env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
Q001 select INBOX
Q002 fetch 1:* FLAGS
Q003 status INBOX.Trash MESSAGES
@@ -786,7 +792,7 @@ EOF
rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
-env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
R001 CREATE INBOX.a
R002 LIST (ACL MYRIGHTS POSTADDRESS) "" "*"
R003 ACL STORE INBOX owner -t
@@ -893,7 +899,7 @@ Subject: test
test
EOF
-env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
S001 SELECT INBOX.a
S002 COPY 1 INBOX.a
S003 NOOP
@@ -967,7 +973,7 @@ echo "user2 1 1 `pwd` confmdtest3" >confmdtest4/indexb || exit 1
IMAP_SHAREDINDEXFILE=`pwd`/confmdtest4/index
export IMAP_SHAREDINDEXFILE
-env AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
T001 ACL STORE INBOX user=user0 +l
T002 CREATE INBOX.a
T003 ACL STORE INBOX.a anyone +lr
@@ -979,7 +985,7 @@ user1
T005 LOGOUT
EOF
-env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
T010 ACL STORE INBOX anyone +l
T011 CREATE INBOX.a
T012 append INBOX.a \Seen {22}
@@ -990,14 +996,14 @@ user2
T013 LOGOUT
EOF
-env AUTHENTICATED=user0 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env AUTHENTICATED=user0 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
T020 list(acl) "" "#shared.*"
T021 ACL STORE INBOX anyone acdilrsw
T022 list(acl) "" "#shared.%"
T023 LOGOUT
EOF
-env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
T030 LIST "" "#shared.*"
T031 LIST "" "#shared.%"
T032 LIST "" "#shared.a.%"
@@ -1032,7 +1038,7 @@ user.2 1 1 `pwd` confmdtest3
usér/3 1 1 `pwd` confmdtest3
EOF
-env AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
a ENABLE UTF8=ACCEPT
T055 LIST "" "#shared.b.*"
T056 LIST "" "#shared.b.%"
@@ -1041,7 +1047,7 @@ T058 LIST "" "#shared.b.use&-2.*"
TDONE LOGOUT
EOF
-env IMAP_SHAREDMUNGENAMES=1 AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_SHAREDMUNGENAMES=1 AUTHENTICATED=user1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
a ENABLE UTF8=ACCEPT
T055 LIST "" "#shared.b.*"
T056 LIST "" "#shared.b.%"
@@ -1065,7 +1071,7 @@ EOF
echo "usergroup1 1 1 `pwd` confmdtest" >confmdtest4/indexgroup1 || exit 1
-env IMAP_SHAREDMUNGENAMES=1 AUTHENTICATED=user1 OPTIONS=sharedgroup=group1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 ./imapd <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_SHAREDMUNGENAMES=1 AUTHENTICATED=user1 OPTIONS=sharedgroup=group1 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest2 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
T072 LIST "" #shared.*
T073 LIST(ACL) "" INBOX
T074 ACL STORE INBOX user=fred lr
diff --git a/imap/testsuitevalgrind b/imap/testsuitevalgrind
new file mode 100644
index 0000000..e39c463
--- /dev/null
+++ b/imap/testsuitevalgrind
@@ -0,0 +1,5 @@
+#! /bin/bash
+
+valgrind --tool=memcheck --leak-check=yes --error-exitcode=1 "$@" && exit 0
+>confmdtesterror
+exit 0
diff --git a/maildir/maildirquota.c b/maildir/maildirquota.c
index 70f05a7..1f9c428 100644
--- a/maildir/maildirquota.c
+++ b/maildir/maildirquota.c
@@ -500,10 +500,12 @@ static int docheckquota(struct maildirsize *info,
if (rename(newmaildirsizename, info->maildirsizefile))
{
unlink(newmaildirsizename);
+ free(newmaildirsizename);
close(maildirsize_fd);
errno=EIO;
return (-1);
}
+ free(newmaildirsizename);
info->recalculation_needed=0;
info->size.nbytes=maildirsize_size;