diff --git a/commit.c b/commit.c index 3e8c87294b..1fe23b6e3a 100644 --- a/commit.c +++ b/commit.c @@ -644,6 +644,7 @@ static char *get_header(const struct commit *commit, const char *key) static char *replace_encoding_header(char *buf, char *encoding) { char *encoding_header = strstr(buf, "\nencoding "); + char *header_end = strstr(buf, "\n\n"); char *end_of_encoding_header; int encoding_header_pos; int encoding_header_len; @@ -651,8 +652,10 @@ static char *replace_encoding_header(char *buf, char *encoding) int need_len; int buflen = strlen(buf) + 1; - if (!encoding_header) - return buf; /* should not happen but be defensive */ + if (!header_end) + header_end = buf + buflen; + if (!encoding_header || encoding_header >= header_end) + return buf; encoding_header++; end_of_encoding_header = strchr(encoding_header, '\n'); if (!end_of_encoding_header)