]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mailinfo: treat header values as C strings
authorJeff King <peff@peff.net>
Tue, 11 Feb 2020 17:18:52 +0000 (12:18 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Feb 2020 18:17:16 +0000 (10:17 -0800)
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>
mailinfo.c

index 402ef04dd10cb955a4805f71745957aafdc5d657..59d5a8b8f314b259352d3d5b49266844ba3d7641 100644 (file)
@@ -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);