From: Stephen Boyd Date: Tue, 31 Mar 2009 23:24:38 +0000 (-0700) Subject: format_sanitized_subject: Don't trim past initial length of strbuf X-Git-Tag: v1.6.3-rc0~32^2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=871d21d42e0f782b7cb111beec8c252e9aa627ff;p=git.git format_sanitized_subject: Don't trim past initial length of strbuf If the subject line is '...' the strbuf will be accessed before the first dot is added; potentially changing the strbuf passed into the function or accessing sb->buf[-1] if it was originally empty. Reported-by: René Scharfe Signed-off-by: Junio C Hamano --- diff --git a/pretty.c b/pretty.c index c57cef47c..a0ef35655 100644 --- a/pretty.c +++ b/pretty.c @@ -502,6 +502,7 @@ static int istitlechar(char c) static void format_sanitized_subject(struct strbuf *sb, const char *msg) { size_t trimlen; + size_t start_len = sb->len; int space = 2; for (; *msg && *msg != '\n'; msg++) { @@ -519,8 +520,9 @@ static void format_sanitized_subject(struct strbuf *sb, const char *msg) /* trim any trailing '.' or '-' characters */ trimlen = 0; - while (sb->buf[sb->len - 1 - trimlen] == '.' - || sb->buf[sb->len - 1 - trimlen] == '-') + while (sb->len - trimlen > start_len && + (sb->buf[sb->len - 1 - trimlen] == '.' + || sb->buf[sb->len - 1 - trimlen] == '-')) trimlen++; strbuf_remove(sb, sb->len - trimlen, trimlen); }