fail in pick if a massage of -thread has no thread-id
[mmh] / uip / pick.c
index 25bd6b6..f700a0c 100644 (file)
@@ -1088,26 +1088,29 @@ GREPaction(struct field *f, int msgnum, void *data)
 {
        struct grep_data *g = data;
        int ret;
-       char *buf;
+       char buf[BUFSIZ];
 
        if (!g->header && *f->name) {
                return FALSE;
        }
 
        /* check for the right field */
-       if (g->header && *g->header && mh_strcasecmp(g->header, f->name)==0) {
+       if (!(g->header && *g->header && mh_strcasecmp(g->header, f->name)==0)) {
                return FALSE;
        }
 
-       ret = regexec(g->preg, f->value, 0, NULL, 0) == REG_NOMATCH;
+       if(decode_rfc2047(f->value, buf, sizeof(buf))) {
+               ret = regexec(g->preg, buf, 0, NULL, 0);
+       } else {
+               ret = regexec(g->preg, f->value, 0, NULL, 0);
+       }
        switch (ret) {
        case 0:
                return TRUE;
        case REG_NOMATCH:
                return FALSE;
        default:
-               buf = mh_xcalloc(BUFSIZ, sizeof(char));
-               regerror(ret, g->preg, buf, BUFSIZ*sizeof(char));
+               regerror(ret, g->preg, buf, sizeof(buf));
                fprintf(stderr, "%s\n", buf);
                return FALSE;
        }
@@ -1282,7 +1285,6 @@ DATEfree(struct nexus **n)
        }
        dd = (*n)->data;
 
-       mh_free0(&dd->datef);
        mh_free0(n);
 }
 
@@ -1328,6 +1330,7 @@ createpickthread(char *msgs)
        for (i = 0; i < files.size; i++) {
                buf = getthreadid(files.msgs[i]);
                if (!buf) {
+                       adios(EX_DATAERR, NULL, "message %s is not part of a thread", basename(files.msgs[i]));
                        continue;
                }
 
@@ -1364,7 +1367,7 @@ createonethread(char *c)
 
        bd->left = left;
        bd->right = right;
-       gd->header = "message-id";
+       gd->header = mh_xstrdup("message-id");
 
        snprintf(buf, sizeof(buf), "^[ \t]*<%s>", c);
        if(!gcompile(gd, buf)) {
@@ -1373,7 +1376,7 @@ createonethread(char *c)
        }
 
        gd = right->data;
-       gd->header = "references";
+       gd->header = mh_xstrdup("references");
 
        snprintf(buf, sizeof(buf), "^[ \t]*<%s>", c);
        if(!gcompile(gd, buf)) {