fix logic bug in getthreadid
[mmh] / sbr / getthreadid.c
index 99a7d67..a1ad7a0 100644 (file)
@@ -14,15 +14,17 @@ getthreadid(const char *path)
        enum state state = FLD2;
        FILE *file = fopen(path, "r");
 
-       while (state == FLD2 && !msgid && !referens) {
+       while (state == FLD2 && !(msgid && referens)) {
                switch (state = m_getfld2(state, &f, file)) {
                case FLD2:
                        if (strncasecmp("message-id", f.name, f.namelen)==0) {
                                msgid = f.value;
                                f.value = NULL;
+                               f.alloclen = 0;
                        } else if (strncasecmp("references", f.name, f.namelen)==0) {
                                referens = f.value;
                                f.value = NULL;
+                               f.alloclen = 0;
                        }
                        break;
                default:
@@ -47,6 +49,9 @@ threadid(char *msgid, char *referens)
        char *cp;
 
        threadfrom = referens ? referens : msgid;
+       if (!threadfrom) {
+               return NULL;
+       }
 
        start = strchr(threadfrom, '<');
        end = strchr(start, '>');