From b6537d83ee30693efb17a35321b8bd03b752033a Mon Sep 17 00:00:00 2001 From: Jeff King Date: Tue, 11 Feb 2020 12:18:52 -0500 Subject: mailinfo: treat header values as C strings We read each header line into a strbuf, which means that we could in theory handle header values with embedded NUL bytes. But in practice, the values we parse out are passed to decode_header(), which uses strstr(), strchr(), etc. And we would not expect such bytes anyway; they are forbidden by RFC822, etc. and any non-ASCII characters should be encoded with RFC2047 encoding. So let's switch to using strbuf_addstr(), which saves us some length computations (and will enable further cleanups in this code). Signed-off-by: Jeff King Signed-off-by: Junio C Hamano diff --git a/mailinfo.c b/mailinfo.c index 402ef04..59d5a8b 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -557,7 +557,7 @@ static int check_header(struct mailinfo *mi, /* Unwrap inline B and Q encoding, and optionally * normalize the meta information to utf8. */ - strbuf_add(&sb, line->buf + len + 2, line->len - len - 2); + strbuf_addstr(&sb, line->buf + len + 2); decode_header(mi, &sb); handle_header(&hdr_data[i], &sb); ret = 1; @@ -568,7 +568,7 @@ static int check_header(struct mailinfo *mi, /* Content stuff */ if (cmp_header(line, "Content-Type")) { len = strlen("Content-Type: "); - strbuf_add(&sb, line->buf + len, line->len - len); + strbuf_addstr(&sb, line->buf + len); decode_header(mi, &sb); handle_content_type(mi, &sb); ret = 1; @@ -576,7 +576,7 @@ static int check_header(struct mailinfo *mi, } if (cmp_header(line, "Content-Transfer-Encoding")) { len = strlen("Content-Transfer-Encoding: "); - strbuf_add(&sb, line->buf + len, line->len - len); + strbuf_addstr(&sb, line->buf + len); decode_header(mi, &sb); handle_content_transfer_encoding(mi, &sb); ret = 1; @@ -584,7 +584,7 @@ static int check_header(struct mailinfo *mi, } if (cmp_header(line, "Message-Id")) { len = strlen("Message-Id: "); - strbuf_add(&sb, line->buf + len, line->len - len); + strbuf_addstr(&sb, line->buf + len); decode_header(mi, &sb); if (mi->add_message_id) mi->message_id = strbuf_detach(&sb, NULL); -- cgit v0.10.2-6-g49f6