summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Varshavchik2022-01-17 15:14:06 -0500
committerSam Varshavchik2022-01-17 15:15:02 -0500
commit6ff4d7ff79a967b58b6eca3506b48c5d3219f3dc (patch)
tree651e32310c73c86c316db520174fe89e63bc5e7f
parent49028a9eb32a570b3bc73777d0474e458c1c1949 (diff)
downloadcourier-libs-6ff4d7ff79a967b58b6eca3506b48c5d3219f3dc.tar.bz2
Fix minor memory leaks.
bdbobj_nextkey can leak memory. Looks like some glibc or valgrind configs detect memory leaks from putenv(), use setenv() instead. It's POSIX 2001. Take this opportunity to clean up the test script.
-rw-r--r--bdbobj/bdbobj2.c3
-rw-r--r--imap/ChangeLog4
-rw-r--r--imap/imapd.c23
-rwxr-xr-ximap/testsuite82
-rw-r--r--imap/testsuite.txt24
-rw-r--r--imap/testsuitefix.pl.in2
-rw-r--r--sqwebmail/ChangeLog4
7 files changed, 94 insertions, 48 deletions
diff --git a/bdbobj/bdbobj2.c b/bdbobj/bdbobj2.c
index d4311b7..f289b52 100644
--- a/bdbobj/bdbobj2.c
+++ b/bdbobj/bdbobj2.c
@@ -70,6 +70,9 @@ DBT key, value;
}
#endif
+ if (!key.data)
+ return 0;
+
*keylen=key.size;
*vallen=value.size;
if ((*val=(char *)malloc(*vallen + 1)) == 0) return (0);
diff --git a/imap/ChangeLog b/imap/ChangeLog
index c5fea32..7ca1cd0 100644
--- a/imap/ChangeLog
+++ b/imap/ChangeLog
@@ -1,3 +1,7 @@
+2022-01-17 Sam Varshavchik <mrsam@courier-mta.com>
+
+ * Fix minor memory leaks.
+
5.1.7
2022-01-16 Arjen de Korte <build+github@de-korte.org>
diff --git a/imap/imapd.c b/imap/imapd.c
index c0a4aa9..ccc1991 100644
--- a/imap/imapd.c
+++ b/imap/imapd.c
@@ -6591,16 +6591,11 @@ int uid=0;
static void dogethostname()
{
-char buf[2048];
-char *p;
+ char buf[2048];
if (gethostname(buf, sizeof(buf)) < 0)
strcpy(buf, "courier-imap");
- p=malloc(strlen(buf)+sizeof("HOSTNAME="));
- if (!p)
- write_error_exit(0);
- strcat(strcpy(p, "HOSTNAME="), buf);
- putenv(p);
+ setenv("HOSTNAME", buf, 1);
}
#if 0
@@ -6764,14 +6759,13 @@ int main(int argc, char **argv)
{
const char *p;
- putenv("TCPREMOTEIP=127.0.0.1");
- putenv("TCPREMOTEPORT=0");
+ setenv("TCPREMOTEIP", "127.0.0.1", 1);
+ setenv("TCPREMOTEPORT", "0", 1);
p=getenv("AUTHENTICATED");
if (!p || !*p)
{
struct passwd *pw=getpwuid(getuid());
- char *me;
if (!pw)
{
@@ -6781,12 +6775,7 @@ int main(int argc, char **argv)
exit(1);
}
- me=malloc(sizeof("AUTHENTICATED=")+strlen(pw->pw_name));
- if (!me)
- write_error_exit(0);
-
- strcat(strcpy(me, "AUTHENTICATED="), pw->pw_name);
- putenv(me);
+ setenv("AUTHENTICATED", pw->pw_name, 1);
}
}
@@ -6805,7 +6794,7 @@ int main(int argc, char **argv)
if (!protocol || !*protocol)
protocol="IMAP";
- putenv("IMAP_STARTTLS=NO"); /* No longer grok STARTTLS */
+ setenv("IMAP_STARTTLS", "NO", 1); /* No longer grok STARTTLS */
/* We use select() with a timeout, so use non-blocking filedescs */
diff --git a/imap/testsuite b/imap/testsuite
index 37a264b..268d370 100755
--- a/imap/testsuite
+++ b/imap/testsuite
@@ -130,7 +130,7 @@ EOF
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
a001 select inbox
a002 fetch 1 (bodystructure)
a003 fetch 1 (body[])
@@ -227,7 +227,7 @@ touch -t 199901010000 confmdtest/new/msg3
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
b000 status inbox ( MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
b001 select inbox
b001a status inbox ( MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
@@ -272,7 +272,7 @@ b031 fetch 2 (bodystructure)
adone logout
EOF
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
foo select inbox.bozo
foo store 1 +flags \Deleted
foo expunge
@@ -284,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 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
c001 select inbox
c002 append inbox {5}
test
@@ -314,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 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
d001 select inbox
d002 append inbox {5}
test
@@ -325,7 +325,7 @@ d005 noop
ddone logout
EOF
cat confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
e001 select inbox
e002 copy 1:2 inbox
e003 noop
@@ -334,7 +334,7 @@ EOF
cat confmdtest/maildirsize
../maildir/maildirmake -f Trash confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
f001 select inbox
f002 copy 1:2 inbox
f002 copy 1:2 inbox.Trash
@@ -349,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 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
g001 select inbox
g002 select Trash
g003 select INBOX.Trash
@@ -373,7 +373,7 @@ chmod u-rwx confmdtest2/.b/cur
echo "test `pwd`/confmdtest2" >confmdtest/shared-maildirs
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
h001 list "" "*"
h002 list "" "%"
h003 list "" "%.%"
@@ -428,19 +428,19 @@ EOF
../maildir/maildirmake -f c confmdtest
../maildir/maildirmake -f Trash confmdtest2
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
ii001 list "" "*"
ii002 list "" "*"
iidone logout
EOF
-env IMAP_BROKENUIDV=1 IMAP_CHECK_ALL_FOLDERS=1 MAILDIR=confmdtest $IMAPINVOKE <<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
ii003 list "" "*"
ii004 list "" "*"
iidone logout
EOF
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
i001 select shared.test.b
i002 select shared.test.a
i003 close
@@ -524,7 +524,7 @@ EOF
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
T001 select INBOX
T002 fetch 1:* (uid body[header.fields(date)])
T003 THREAD ORDEREDSUBJECT US-ASCII ALL
@@ -545,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 $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
J001 list "" "*"
J002 lsub "" "*"
J003 SUBSCRIBE INBOX
@@ -630,7 +630,7 @@ EOF
inituid
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
K001 select INBOX
K002 THREAD REFERENCES US-ASCII ALL
KDONE logout
@@ -640,7 +640,7 @@ rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
../maildir/maildirmake -f Trash confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
L001 CREATE INBOX.a
L002 CREATE INBOX.a.a
L003 CREATE INBOX.aa
@@ -682,7 +682,7 @@ rm -rf confmdtest
../maildir/maildirmake confmdtest || exit 1
../maildir/maildirmake -q 10C confmdtest || exit 1
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
M001 CREATE INBOX.a
M002 APPEND INBOX \Seen {5}
test
@@ -696,7 +696,7 @@ M008 RENAME INBOX.a INBOX.b
MDONE logout
EOF
cat confmdtest/maildirsize
-env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF | sed 's/UIDVALIDITY [0-9]*/UIDVALIDITY/;s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g'
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
M009 DELETE INBOX.b
MDONE logout
EOF
@@ -705,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 $IMAPINVOKE <<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
N001 LIST "" "*"
N002 append inbox \Deleted {11}
test
@@ -722,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 $IMAPINVOKE <<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
O001 append inbox NIL {11}
test
@@ -739,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 $IMAPINVOKE <<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
p001 SELECT INBOX
p002 CREATE INBOX.a
p003 COPY 1 INBOX.a
@@ -775,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 $IMAPINVOKE <<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
Q001 select INBOX
Q002 fetch 1:* FLAGS
Q003 status INBOX.Trash MESSAGES
@@ -792,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 $IMAPINVOKE <<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
R001 CREATE INBOX.a
R002 LIST (ACL MYRIGHTS POSTADDRESS) "" "*"
R003 ACL STORE INBOX owner -t
@@ -899,7 +899,7 @@ Subject: test
test
EOF
-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'
+env IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
S001 SELECT INBOX.a
S002 COPY 1 INBOX.a
S003 NOOP
@@ -973,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 $IMAPINVOKE <<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
T001 ACL STORE INBOX user=user0 +l
T002 CREATE INBOX.a
T003 ACL STORE INBOX.a anyone +lr
@@ -985,7 +985,7 @@ user1
T005 LOGOUT
EOF
-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'
+env AUTHENTICATED=user2 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest3 $IMAPINVOKE <<EOF
T010 ACL STORE INBOX anyone +l
T011 CREATE INBOX.a
T012 append INBOX.a \Seen {22}
@@ -996,14 +996,14 @@ user2
T013 LOGOUT
EOF
-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'
+env AUTHENTICATED=user0 IMAP_KEYWORDS=1 IMAP_MOVE_EXPUNGE_TO_TRASH=1 IMAP_BROKENUIDV=1 MAILDIR=confmdtest $IMAPINVOKE <<EOF
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 $IMAPINVOKE <<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
T030 LIST "" "#shared.*"
T031 LIST "" "#shared.%"
T032 LIST "" "#shared.a.%"
@@ -1038,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 $IMAPINVOKE <<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
a ENABLE UTF8=ACCEPT
T055 LIST "" "#shared.b.*"
T056 LIST "" "#shared.b.%"
@@ -1047,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 $IMAPINVOKE <<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
a ENABLE UTF8=ACCEPT
T055 LIST "" "#shared.b.*"
T056 LIST "" "#shared.b.%"
@@ -1071,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 $IMAPINVOKE <<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
T072 LIST "" #shared.*
T073 LIST(ACL) "" INBOX
T074 ACL STORE INBOX user=fred lr
@@ -1089,3 +1089,23 @@ T085 GETACL INBOX
T086 LIST(ACL) "" INBOX
TDONE LOGOUT
EOF
+
+rm -rf confmdtest confmdtest2
+../maildir/maildirmake confmdtest
+../maildir/maildirmake -S confmdtest2
+../maildir/maildirmake -s write -f writable confmdtest2
+../maildir/maildirmake --add another=`pwd`/confmdtest2 confmdtest
+
+env IMAP_BROKENUIDV=1 MAILDIR=confmdtest AUTHENTICATED=user1 $IMAPINVOKE <<EOF
+U001 APPEND INBOX \Seen {5}
+test
+
+U002 LIST "" "*"
+U003 SELECT INBOX
+U004 COPY 1 "shared.another.writable"
+U005 STATUS invalid (UIDVALIDITY)
+U006 DELETE INBOX
+U007 LISTRIGHTS INBOX user=user1
+U008 LISTRIGHTS shared.another.writable user=user1
+U009 MYRIGHTS INBOX
+EOF
diff --git a/imap/testsuite.txt b/imap/testsuite.txt
index e5a2888..834d6de 100644
--- a/imap/testsuite.txt
+++ b/imap/testsuite.txt
@@ -1699,3 +1699,27 @@
001413 T086 OK LIST completed
001414 * BYE Courier-IMAP server shutting down
001415 TDONE OK LOGOUT completed
+001416 * PREAUTH Ready.
+001417 + OK
+001418 U001 OK APPEND Ok.
+001419 * LIST (\HasNoChildren) "." "shared.another.writable"
+001419 * LIST (\Noselect \HasChildren) "." "shared"
+001419 * LIST (\Noselect \HasChildren) "." "shared.another"
+001419 * LIST (\Unmarked \HasNoChildren) "." "INBOX"
+001419 U002 OK LIST completed
+001420 * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
+001421 * OK [PERMANENTFLAGS (\Draft \Answered \Flagged \Deleted \Seen)] Limited
+001422 * 1 EXISTS
+001423 * 0 RECENT
+001424 * OK [UIDVALIDITY] Ok
+001425 * OK [MYRIGHTS "acdilrsw"] ACL
+001426 U003 OK [READ-WRITE] Ok
+001427 U004 OK COPY completed.
+001428 U005 NO Mailbox does not exist, or must be subscribed to.
+001429 U006 NO Cannot delete currently-open folder.
+001430 * LISTRIGHTS "INBOX" "user=user1" "" a c d i l p r s w
+001430 U007 OK LISTRIGHTS completed.
+001431 * LISTRIGHTS "shared.another.writable" "user=user1" "" a c d i l p r s w
+001431 U008 OK LISTRIGHTS completed.
+001432 * MYRIGHTS "INBOX" "acdilrsw"
+001433 U009 OK MYRIGHTS completed.
diff --git a/imap/testsuitefix.pl.in b/imap/testsuitefix.pl.in
index abe0e6f..aa1ab87 100644
--- a/imap/testsuitefix.pl.in
+++ b/imap/testsuitefix.pl.in
@@ -12,6 +12,8 @@ $n=0;
while (<>)
{
+ s/UIDVALIDITY \d+/UIDVALIDITY/;
+ s/INTERNALDATE "[^"]*"/INTERNALDATE -DATE-/g;
s/\[COPYUID.*\] //;
s/\[APPENDUID.*\] //;
s/^\* ADD \"UID=.*/* ADD UID/;
diff --git a/sqwebmail/ChangeLog b/sqwebmail/ChangeLog
index 32bfd96..4cf2868 100644
--- a/sqwebmail/ChangeLog
+++ b/sqwebmail/ChangeLog
@@ -1,3 +1,7 @@
+2022-01-17 Sam Varshavchik <mrsam@courier-mta.com>
+
+ * Fix minor memory leaks.
+
6.0.9
2022-01-16 Arjen de Korte <build+github@de-korte.org>