@matheusbsbs / matheus-bagliano / commits / b6537d83ee
Fork 0

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 <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed Feb 11, 2020 at 12:18 UTC b6537d83ee30693efb17a35321b8bd03b752033a
1 file changed +4 -4
mailinfo.c
+4 -4
@@ -557,7 +557,7 @@ static int check_header(struct mailinfo *mi,
557 /* Unwrap inline B and Q encoding, and optionally
558 * normalize the meta information to utf8.
559 */
560 - strbuf_add(&sb, line->buf + len + 2, line->len - len - 2);
560 + strbuf_addstr(&sb, line->buf + len + 2);
561 decode_header(mi, &sb);
562 handle_header(&hdr_data[i], &sb);
563 ret = 1;
@@ -568,7 +568,7 @@ static int check_header(struct mailinfo *mi,
568 /* Content stuff */
569 if (cmp_header(line, "Content-Type")) {
570 len = strlen("Content-Type: ");
571 - strbuf_add(&sb, line->buf + len, line->len - len);
571 + strbuf_addstr(&sb, line->buf + len);
572 decode_header(mi, &sb);
573 handle_content_type(mi, &sb);
574 ret = 1;
@@ -576,7 +576,7 @@ static int check_header(struct mailinfo *mi,
576 }
577 if (cmp_header(line, "Content-Transfer-Encoding")) {
578 len = strlen("Content-Transfer-Encoding: ");
579 - strbuf_add(&sb, line->buf + len, line->len - len);
579 + strbuf_addstr(&sb, line->buf + len);
580 decode_header(mi, &sb);
581 handle_content_transfer_encoding(mi, &sb);
582 ret = 1;
@@ -584,7 +584,7 @@ static int check_header(struct mailinfo *mi,
584 }
585 if (cmp_header(line, "Message-Id")) {
586 len = strlen("Message-Id: ");
587 - strbuf_add(&sb, line->buf + len, line->len - len);
587 + strbuf_addstr(&sb, line->buf + len);
588 decode_header(mi, &sb);
589 if (mi->add_message_id)
590 mi->message_id = strbuf_detach(&sb, NULL);