aboutsummaryrefslogtreecommitdiffstats
path: root/mailinfo.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2020-05-01 13:39:51 -0700
committerJunio C Hamano <gitster@pobox.com>2020-05-01 13:39:51 -0700
commitcc0c732f6ba533ed4ee9f8a29f30628b04dba373 (patch)
treea379f3bf4e8d8946d307a194c66006ceb25ee7cd /mailinfo.c
parent81bfe5434aaae0cf8586bdfbe318a9a779b03fc5 (diff)
parent391999744771002cb5feded004879f36534b9b14 (diff)
downloadgit-cc0c732f6ba533ed4ee9f8a29f30628b04dba373.tar.gz
Merge branch 'dd/mailinfo-with-nul'
Tighten "git mailinfo" to notice and error out when decoded result contains NUL in it. * dd/mailinfo-with-nul: mailinfo: disallow NUL character in mail's header mailinfo.c: avoid strlen on strings that can contains NUL t4254: merge 2 steps of a single test
Diffstat (limited to 'mailinfo.c')
-rw-r--r--mailinfo.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/mailinfo.c b/mailinfo.c
index 742fa376ab..5681d9130d 100644
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -447,19 +447,21 @@ static int convert_to_utf8(struct mailinfo *mi,
struct strbuf *line, const char *charset)
{
char *out;
+ size_t out_len;
if (!mi->metainfo_charset || !charset || !*charset)
return 0;
if (same_encoding(mi->metainfo_charset, charset))
return 0;
- out = reencode_string(line->buf, mi->metainfo_charset, charset);
+ out = reencode_string_len(line->buf, line->len,
+ mi->metainfo_charset, charset, &out_len);
if (!out) {
mi->input_error = -1;
return error("cannot convert from %s to %s",
charset, mi->metainfo_charset);
}
- strbuf_attach(line, out, strlen(out), strlen(out));
+ strbuf_attach(line, out, out_len, out_len);
return 0;
}
@@ -1136,6 +1138,11 @@ static void handle_info(struct mailinfo *mi)
else
continue;
+ if (memchr(hdr->buf, '\0', hdr->len)) {
+ error("a NUL byte in '%s' is not allowed.", header[i]);
+ mi->input_error = -1;
+ }
+
if (!strcmp(header[i], "Subject")) {
if (!mi->keep_subject) {
cleanup_subject(mi, hdr);