diff options
| author | Junio C Hamano <gitster@pobox.com> | 2020-05-01 13:39:51 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2020-05-01 13:39:51 -0700 |
| commit | cc0c732f6ba533ed4ee9f8a29f30628b04dba373 (patch) | |
| tree | a379f3bf4e8d8946d307a194c66006ceb25ee7cd /mailinfo.c | |
| parent | 81bfe5434aaae0cf8586bdfbe318a9a779b03fc5 (diff) | |
| parent | 391999744771002cb5feded004879f36534b9b14 (diff) | |
| download | git-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.c | 11 |
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); |
