fix logic bug in getthreadid
authorPhilipp Takacs <philipp@bureaucracy.de>
Fri, 11 Jan 2019 01:28:29 +0000 (02:28 +0100)
committerPhilipp Takacs <philipp@bureaucracy.de>
Fri, 11 Jan 2019 02:08:09 +0000 (03:08 +0100)
getthreadid now early exit the m_getfld2 loop, if the message-id _and_
the references field is found. Without this the wrong thread-id may
found if the message-id field is before the references field.
Thanks c_14 for reporting

sbr/getthreadid.c
test/tests/pick/test-thread

index 41e3e22..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:
index 0397e11..0ac0eed 100644 (file)
@@ -5,21 +5,28 @@
 #
 ######################################################
 
-expected_err=$MH_TEST_DIR/$$.expected_err
-expected_out=$MH_TEST_DIR/$$.expected_out
-actual_err=$MH_TEST_DIR/$$.actual_err
-actual_out=$MH_TEST_DIR/$$.actual_out
+. "$MH_TEST_COMMON"
 
 # All messages should be go to stdout
-cp `mhpath 5` 5.old
 anno -component 'Message-Id' -text '<testid>' 5 -nodate
-cat > $expected_out <<EOF
+anno -component 'Message-Id' -text '<testid2>' 6 -nodate
+
+runandcheck 'pick -thread 5' <<!
 5
-EOF
-# Nothing should to go stderr
-cat /dev/null > $expected_err
+!
 
-pick -thread 5 > $actual_out 2> $actual_err
-mv 5.old `mhpath 5`
-diff -u $expected_err $actual_err
-diff -u $expected_out $actual_out
+anno -component 'References' -text '<testid>' 6 -nodate -append
+runandcheck 'pick -thread 5' <<!
+5
+6
+!
+runandcheck 'pick -thread 6' <<!
+5
+6
+!
+anno -delete -component 'References'
+anno -component 'References' -text '<testid>' 6 -nodate
+runandcheck 'pick -thread 6' <<!
+5
+6
+!