diff options
| author | Sam Varshavchik | 2022-02-03 23:38:02 -0500 |
|---|---|---|
| committer | Sam Varshavchik | 2022-02-03 23:38:02 -0500 |
| commit | 7ccf3c9341de9dc5319e7269793c4fcc7ece4eab (patch) | |
| tree | 6314785eb95176e4ceee3191347db7d9ba982da9 | |
| parent | c02c7c70e57ce07f186862826168fae59df224cc (diff) | |
| download | courier-libs-7ccf3c9341de9dc5319e7269793c4fcc7ece4eab.tar.bz2 | |
Add additional tests.
Test keyword handling. Fix memory corruption in the maildirkw utilty.
| -rw-r--r-- | maildir/.gitignore | 1 | ||||
| -rw-r--r-- | maildir/Makefile.am | 8 | ||||
| -rw-r--r-- | maildir/maildirkeywords2.c | 14 | ||||
| -rw-r--r-- | maildir/maildirkw.C (renamed from maildir/maildirkw.c) | 20 | ||||
| -rw-r--r-- | maildir/maildirkwtest2.c | 25 | ||||
| -rw-r--r-- | maildir/testsuite | 30 | ||||
| -rw-r--r-- | maildir/testsuite.txt | 28 |
7 files changed, 118 insertions, 8 deletions
diff --git a/maildir/.gitignore b/maildir/.gitignore index 8b7d08e..0d863fa 100644 --- a/maildir/.gitignore +++ b/maildir/.gitignore @@ -21,6 +21,7 @@ /maildirkw.1 /maildirkw.html /maildirkwtest +/maildirkwtest2 /maildirmake /maildirmake.1 /maildirmake.1.in diff --git a/maildir/Makefile.am b/maildir/Makefile.am index bd4dadc..bcac417 100644 --- a/maildir/Makefile.am +++ b/maildir/Makefile.am @@ -53,6 +53,7 @@ libmaildir_la_SOURCES=autoresponse.c autoresponse.h \ maildirwatch.c maildirwatch.h loginexec.c loginexec.h noinst_PROGRAMS=deliverquota maildirmake testmaildirfilter maildirkwtest \ + maildirkwtest2 \ maildirkw maildiracl maildiraclttest testmaildirsearch maildirwatch deliverquota_SOURCES=deliverquota.c @@ -80,12 +81,17 @@ maildirkwtest_LDADD=libmaildir.la maildirkwtest_DEPENDENCIES=libmaildir.la maildirkwtest_LDFLAGS=-static -maildirkw_SOURCES=maildirkw.c +maildirkw_SOURCES=maildirkw.C maildirkw_LDADD=libmaildir.la ../liblock/liblock.la ../numlib/libnumlib.la maildirkw_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \ ../numlib/libnumlib.la maildirkw_LDFLAGS=-static +maildirkwtest2_SOURCES=maildirkw.C maildirkwtest2.c +maildirkwtest2_LDADD=$(maildirkw_LDADD) +maildirkwtest2_DEPENDENCIES=$(maildirkw_DEPENDENCIES) +maildirkwtest2_LDFLAGS=-static + maildirwatch_SOURCES=maildirwatchprog.c maildirwatch_LDADD=libmaildir.la ../liblock/liblock.la ../numlib/libnumlib.la maildirwatch_DEPENDENCIES=libmaildir.la ../liblock/liblock.la \ diff --git a/maildir/maildirkeywords2.c b/maildir/maildirkeywords2.c index 6923a7a..4bcbcff 100644 --- a/maildir/maildirkeywords2.c +++ b/maildir/maildirkeywords2.c @@ -148,7 +148,12 @@ static void doReadKeywords2(const char *maildir, const char *dir, struct keywordUpdateInfo *updateInfo; time_t t=time(NULL); - time_t tn=t/300; + time_t tn; +#ifdef MAILDIRKW_MOCKTIME + MAILDIRKW_MOCKTIME(); +#endif + + tn=t/300; rki->updateNeeded=0; rki->tryagain=0; @@ -307,6 +312,9 @@ int maildir_kwImport(FILE *fp, struct maildir_kwReadInfo *rki) *q++=0; +#ifdef MAILDIRKW_MOCKTIME2 + MAILDIRKW_MOCKTIME2() +#endif i= (*rki->findMessageByFilename)(p, 0, &n, rki->voidarg); @@ -458,7 +466,7 @@ static void scan_updates(const char *dir, if (in >= n) { /* libmail_kwgReadMaildir autocrerate */ - + struct keywordUpdateInfo *u= realloc(*updateInfo, sizeof(**updateInfo) * (in+1)); @@ -919,7 +927,7 @@ static int maildir_kwSaveCommon(const char *maildir, if (p) *p=0; - + maildir_tmpcreate_init(&createInfo); createInfo.maildir=maildir; diff --git a/maildir/maildirkw.c b/maildir/maildirkw.C index a0df76c..1c17959 100644 --- a/maildir/maildirkw.c +++ b/maildir/maildirkw.C @@ -1,5 +1,5 @@ /* -** Copyright 2003-2004 Double Precision, Inc. +** Copyright 2003-2022 Double Precision, Inc. ** See COPYING for distribution information. */ @@ -19,6 +19,9 @@ #include "maildirkeywords.h" #include "maildirwatch.h" +#include <string> +#include <map> + static void usage() { printf("Usage: maildirkw [ options ] maildir [+/-]flag [+/-]flag...\n"); @@ -171,10 +174,10 @@ static int doit_locked(const char *maildir, rc= -1; unlink(tmpname); } + free(tmpname); + free(newname); } - free(tmpname); - free(newname); if (kwm_alloced) libmail_kwmDestroy(kwm_alloced); libmail_kwgDestroy(&g); @@ -196,10 +199,21 @@ static int list_locked(const char *maildir) if (rc) return rc; + std::map<std::string, size_t> messages; + for (n=0; n<g.nMessages; n++) { struct libmail_kwGenericEntry *e= libmail_kwgFindByIndex(&g, n); + + if (e) + messages[e->filename]=n; + } + + for (auto b=messages.begin(), ee=messages.end(); b != ee; ++b) + { + struct libmail_kwGenericEntry *e= + libmail_kwgFindByIndex(&g, b->second); struct libmail_kwMessageEntry *k; if (!e) diff --git a/maildir/maildirkwtest2.c b/maildir/maildirkwtest2.c new file mode 100644 index 0000000..9a1dd7d --- /dev/null +++ b/maildir/maildirkwtest2.c @@ -0,0 +1,25 @@ +#define MAILDIRKW_MOCKTIME() \ + do { \ + const char *p=getenv("MOCKTIME"); \ + if (p) \ + t=atoi(p); \ + } while (0) + +#define MAILDIRKW_MOCKTIME2() \ + do { \ + const char *eee=getenv("MOCKTIME"); \ + \ + if (eee && strcmp(eee, "1000") == 0 && \ + strcmp(p, "004") == 0) \ + { \ + printf("Faked stale filename\n"); \ + fflush(stdout); \ + p=NULL; \ + \ + } \ + } while(0); \ + \ + i=NULL; \ + if (p) + +#include "maildirkeywords2.c" diff --git a/maildir/testsuite b/maildir/testsuite index 71b9fe2..7245f9c 100644 --- a/maildir/testsuite +++ b/maildir/testsuite @@ -40,7 +40,7 @@ echo "" $VALGRIND ./maildirkw -L md | sort rm -rf md testmd -maildirmake ./testmd +./maildirmake ./testmd $VALGRIND ./maildiracl -set testmd INBOX.Folder user1 rw $VALGRIND ./maildiracl -list testmd INBOX.Folder | sort @@ -49,3 +49,31 @@ $VALGRIND ./maildirmake -f Folder testmd $VALGRIND ./maildiracl -list testmd INBOX.Folder | sort ls testmd/courierimaphieracl rm -rf testmd + +./maildirmake ./testmd +echo "Subject: message 1" >testmd/cur/001:2,S +echo "Subject: message 2" >testmd/cur/002:2,S +echo "Subject: message 3" >testmd/cur/003:2,S +$VALGRIND ./maildirkw testmd 003 gamma alpha beta +$VALGRIND ./maildirkw testmd 002 alpha gamma +$VALGRIND ./maildirkw testmd 001 beta gamma +$VALGRIND ./maildirkw testmd 004 000 +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +echo "===" +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +MOCKTIME=2000 $VALGRIND ./maildirkwtest2 -L testmd +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +>testmd/courierimapkeywords/.tmp.4.foo +>testmd/courierimapkeywords/.tmp.1000.baz +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +ls testmd/courierimapkeywords/.tmp.* 2>&1 +rm -f testmd/courierimapkeywords/:list +echo "epsilon" >testmd/courierimapkeywords/.1.002 +echo "zeta" >testmd/courierimapkeywords/.2.002 +MOCKTIME=1000 $VALGRIND ./maildirkwtest2 -L testmd +ls testmd/courierimapkeywords/.*002 +$VALGRIND ./maildirkw -a testmd 001 alpha beta +$VALGRIND ./maildirkw -L testmd +$VALGRIND ./maildirkw -r testmd 001 beta +$VALGRIND ./maildirkw -L testmd +rm -rf testmd diff --git a/maildir/testsuite.txt b/maildir/testsuite.txt index ed34d92..cc5eb74 100644 --- a/maildir/testsuite.txt +++ b/maildir/testsuite.txt @@ -38,3 +38,31 @@ administrators aceilrstwx owner aceilrstwx user1 rw Folder.Subfolder +001 beta gamma +002 alpha gamma +003 alpha beta gamma +004 000 +=== +Faked stale filename +001 beta gamma +002 alpha gamma +003 alpha beta gamma +004 000 +001 beta gamma +002 alpha gamma +003 alpha beta gamma +004 000 +Faked stale filename +001 beta gamma +002 alpha gamma +003 alpha beta gamma +001 beta gamma +002 alpha gamma +003 alpha beta gamma +testmd/courierimapkeywords/.tmp.1000.baz +002 zeta +testmd/courierimapkeywords/.2.002 +001 alpha beta +002 zeta +001 alpha +002 zeta |
