From: Christian Couder Date: Fri, 27 Mar 2009 00:13:01 +0000 (+0100) Subject: log-tree: fix patch filename computation in "git format-patch" X-Git-Tag: v1.6.3-rc0~32^2~1 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=b09b868f7fee689483d00bea3d52c0f14a80386c;p=git.git log-tree: fix patch filename computation in "git format-patch" When using "git format-patch", "get_patch_filename" in "log-tree.c" calls "strbuf_splice" that could die with the following message: "`pos + len' is too far after the end of the buffer" if you have: buf->len < start_len + FORMAT_PATCH_NAME_MAX but: buf->len + suffix_len > start_len + FORMAT_PATCH_NAME_MAX This patch tries to get rid of that bug. [jc: w/ simplified logic] Signed-off-by: Christian Couder Signed-off-by: Junio C Hamano --- diff --git a/log-tree.c b/log-tree.c index 56a348859..5bd29e699 100644 --- a/log-tree.c +++ b/log-tree.c @@ -187,17 +187,12 @@ void get_patch_filename(struct commit *commit, int nr, const char *suffix, strbuf_addf(buf, commit ? "%04d-" : "%d", nr); if (commit) { + int max_len = start_len + FORMAT_PATCH_NAME_MAX - suffix_len; + format_commit_message(commit, "%f", buf, DATE_NORMAL); - /* - * Replace characters at the end with the suffix if the - * filename is too long - */ - if (buf->len + suffix_len > FORMAT_PATCH_NAME_MAX + start_len) - strbuf_splice(buf, - start_len + FORMAT_PATCH_NAME_MAX - suffix_len, - suffix_len, suffix, suffix_len); - else - strbuf_addstr(buf, suffix); + if (max_len < buf->len) + strbuf_setlen(buf, max_len); + strbuf_addstr(buf, suffix); } }