Fix signature parsing
authorTom Kistner <tom@duncanthrax.net>
Thu, 9 Apr 2009 14:47:50 +0000 (14:47 +0000)
committerTom Kistner <tom@duncanthrax.net>
Thu, 9 Apr 2009 14:47:50 +0000 (14:47 +0000)
src/src/pdkim/pdkim.c

index c70b5d4f4e77195a7faebabb6b2527184294f882..968a9f6c7ff6b28d6911ff018ed8bcbeb98213d8 100644 (file)
@@ -20,7 +20,7 @@
  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
-/* $Cambridge: exim/src/src/pdkim/pdkim.c,v 1.1.2.9 2009/04/09 07:49:11 tom Exp $ */
+/* $Cambridge: exim/src/src/pdkim/pdkim.c,v 1.1.2.10 2009/04/09 14:47:50 tom Exp $ */
 
 #include <stdlib.h>
 #include <stdio.h>
@@ -498,7 +498,7 @@ pdkim_signature *pdkim_parse_sig_header(pdkim_ctx *ctx, char *raw_hdr) {
   p = raw_hdr;
   q = sig->rawsig_no_b_val;
 
-  while (*p != '\0') {
+  while (1) {
 
     /* Ignore FWS */
     if ( (*p == '\r') || (*p == '\n') )
@@ -539,10 +539,10 @@ pdkim_signature *pdkim_parse_sig_header(pdkim_ctx *ctx, char *raw_hdr) {
       if (cur_val == NULL)
         cur_val = pdkim_strnew(NULL);
 
-      if ( (*p == '\r') || (*p == '\n') )
+      if ( (*p == '\r') || (*p == '\n') || (*p == ' ') || (*p == '\t') )
         goto NEXT_CHAR;
 
-      if (*p == ';') {
+      if ( (*p == ';') || (*p == '\0') ) {
         if (cur_tag->len > 0) {
           pdkim_strtrim(cur_val);
           #ifdef PDKIM_DEBUG
@@ -640,6 +640,7 @@ pdkim_signature *pdkim_parse_sig_header(pdkim_ctx *ctx, char *raw_hdr) {
     }
 
     NEXT_CHAR:
+    if (*p == '\0') break;
 
     if (!in_b_val) {
       *q = *p;
@@ -710,7 +711,7 @@ pdkim_pubkey *pdkim_parse_pubkey_record(pdkim_ctx *ctx, char *raw_record) {
 
   p = raw_record;
 
-  while (*p != '\0') {
+  while (1) {
 
     /* Ignore FWS */
     if ( (*p == '\r') || (*p == '\n') )
@@ -744,7 +745,7 @@ pdkim_pubkey *pdkim_parse_pubkey_record(pdkim_ctx *ctx, char *raw_record) {
       if ( (*p == '\r') || (*p == '\n') )
         goto NEXT_CHAR;
 
-      if (*p == ';') {
+      if ( (*p == ';') || (*p == '\0') ) {
         if (cur_tag->len > 0) {
           pdkim_strtrim(cur_val);
           #ifdef PDKIM_DEBUG
@@ -797,6 +798,7 @@ pdkim_pubkey *pdkim_parse_pubkey_record(pdkim_ctx *ctx, char *raw_record) {
     }
 
     NEXT_CHAR:
+    if (*p == '\0') break;
     p++;
   }