From: Tom Kistner Date: Thu, 9 Apr 2009 14:47:50 +0000 (+0000) Subject: Fix signature parsing X-Git-Url: https://git.exim.org/users/jgh/exim.git/commitdiff_plain/cdc997b5635b96355f2b3b113268522ec3cd9060 Fix signature parsing --- diff --git a/src/src/pdkim/pdkim.c b/src/src/pdkim/pdkim.c index c70b5d4f4..968a9f6c7 100644 --- a/src/src/pdkim/pdkim.c +++ b/src/src/pdkim/pdkim.c @@ -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 #include @@ -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++; }