blame.c: Properly initialize strbuf after calling textconv_object(), again
2564aa4 started to initialize buf.alloc, but that should actually be one more byte than the string length due to the trailing \0. Also, do not modify buf.alloc out of the strbuf code. Use the existing strbuf_attach instead. Signed-off-by: Sebastian Schuberth <sschuberth@gmail.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Sebastian Schuberth committed
Nov 7, 2011 at 18:33 UTC
8518088fe803131d11eade2b15796f26ae207191
1 file changed
+3
-4
builtin/blame.c
+3
-4
@@ -2077,6 +2077,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
2077
if (!contents_from || strcmp("-", contents_from)) {
2078
struct stat st;
2079
const char *read_from;
2080
+ char *buf_ptr;
2081
unsigned long buf_len;
2082
2083
if (contents_from) {
@@ -2094,10 +2095,8 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
2095
switch (st.st_mode & S_IFMT) {
2096
case S_IFREG:
2097
if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
2097
- textconv_object(read_from, mode, null_sha1, &buf.buf, &buf_len)) {
2098
- buf.alloc = buf_len;
2099
- buf.len = buf_len;
2100
- }
2098
+ textconv_object(read_from, mode, null_sha1, &buf_ptr, &buf_len))
2099
+ strbuf_attach(&buf, buf_ptr, buf_len, buf_len + 1);
2100
else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)
2101
die_errno("cannot open or read '%s'", read_from);
2102
break;