diff options
author | Werner Koch <wk@gnupg.org> | 2015-04-09 19:06:33 +0200 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2015-04-09 19:06:33 +0200 |
commit | 3fbeba64a8bfb2b673230c124a3d616b6568fd2f (patch) | |
tree | 8ca8b3a24c7699cfd7ba7e71e6bf60141a4ab184 /tools/rfc822parse.c | |
parent | sm: Fix certificate lookup in dirmngr cache. (diff) | |
download | gnupg2-3fbeba64a8bfb2b673230c124a3d616b6568fd2f.tar.xz gnupg2-3fbeba64a8bfb2b673230c124a3d616b6568fd2f.zip |
gpgparsemail: Fix case of zero length continuation lines.
* tools/rfc822parse.c (parse_field): Loop after continuation line.
--
Using header lines like
Name:[lf]
[space][lf]
[lf]
resulted in running into the "(s2 = strchr (delimiters2, *s)" branch
and inserting a new token for the empty continuation line. This also
led to one byte read after the string which is what Hanno figured.
The new code should handle empty continuation lines correct.
Reported-by: Hanno Böck
Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'tools/rfc822parse.c')
-rw-r--r-- | tools/rfc822parse.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/tools/rfc822parse.c b/tools/rfc822parse.c index a70f6a4e7..e8164ce1a 100644 --- a/tools/rfc822parse.c +++ b/tools/rfc822parse.c @@ -808,10 +808,12 @@ parse_field (HDR_LINE hdr) s++; /* Move over the colon. */ for (;;) { - if (!*s) + while (!*s) { if (!hdr->next || !hdr->next->cont) - break; + return tok; /* Ready. */ + + /* Next item is a header continuation line. */ hdr = hdr->next; s = hdr->line; } @@ -824,10 +826,11 @@ parse_field (HDR_LINE hdr) invalid = 0; for (s++;; s++) { - if (!*s) + while (!*s) { if (!hdr->next || !hdr->next->cont) break; + /* Next item is a header continuation line. */ hdr = hdr->next; s = hdr->line; } @@ -880,6 +883,7 @@ parse_field (HDR_LINE hdr) if (*s2 || !hdr->next || !hdr->next->cont) break; + /* Next item is a header continuation line. */ hdr = hdr->next; s = hdr->line; } @@ -931,8 +935,7 @@ parse_field (HDR_LINE hdr) s++; } } - - return tok; + /*NOTREACHED*/ failure: { |