Second SPF fix, moved to where type is correct.
authorPhil Pennock <pdp@exim.org>
Fri, 18 May 2012 19:52:08 +0000 (15:52 -0400)
committerPhil Pennock <pdp@exim.org>
Fri, 18 May 2012 19:52:08 +0000 (15:52 -0400)
De-initialised "type" var in stack declaration, so a repeat of this mistake
would lead to an uninitialized variable usage warning which would have blocked
the previous incorrect fix from being committed.

src/src/lookups/dnsdb.c

index be090cf..0bbc86a 100644 (file)
@@ -122,7 +122,7 @@ int size = 256;
 int ptr = 0;
 int sep = 0;
 int defer_mode = PASS;
-int type = T_TXT;
+int type;
 int failrc = FAIL;
 uschar *outsep = US"\n";
 uschar *outsep2 = NULL;
@@ -164,14 +164,6 @@ if (*keystring == '>')
   while (isspace(*keystring)) keystring++;
   }
 
-/* SPF strings should be concatenated without a separator, thus make
-it the default if not defined (see RFC 4408 section 3.1.3).
-Multiple SPF records are forbidden (section 3.1.2) but are currently
-not handled specially, thus they are concatenated with \n by default. */
-
-if (type == T_SPF && outsep2 == NULL)
-  outsep2 = US"";
-
 /* Check for a defer behaviour keyword. */
 
 if (strncmpic(keystring, US"defer_", 6) == 0)
@@ -206,8 +198,10 @@ if (strncmpic(keystring, US"defer_", 6) == 0)
   while (isspace(*keystring)) keystring++;
   }
 
-/* If the keystring contains an = this must be preceded by a valid type name. */
+/* Figure out the "type" value if it is not T_TXT.
+If the keystring contains an = this must be preceded by a valid type name. */
 
+type = T_TXT;
 if ((equals = Ustrchr(keystring, '=')) != NULL)
   {
   int i, len;
@@ -255,6 +249,14 @@ if (type == T_PTR && keystring[0] != '<' &&
     string_is_ip_address(keystring, NULL) != 0)
   sep = -1;
 
+/* SPF strings should be concatenated without a separator, thus make
+it the default if not defined (see RFC 4408 section 3.1.3).
+Multiple SPF records are forbidden (section 3.1.2) but are currently
+not handled specially, thus they are concatenated with \n by default. */
+
+if (type == T_SPF && outsep2 == NULL)
+  outsep2 = US"";
+
 /* Now scan the list and do a lookup for each item */
 
 while ((domain = string_nextinlist(&keystring, &sep, buffer, sizeof(buffer)))