Re: [PATCH] blame.c: Properly initialize strbuf after calling textconv_object(), again
- From
Jeff King <peff@peff.net>
- Date
- Nov 7, 2011, 16:49 UTC
- Message-ID
- <20111107164946.GD27055@sigill.intra.peff.net>
- In-Reply-To
- <4EB7FEE6.9000609@gmail.com>
On Mon, Nov 07, 2011 at 04:53:10PM +0100, Sebastian Schuberth wrote:
Show 11 quoted lines
> --- a/builtin/blame.c
> +++ b/builtin/blame.c
> @@ -2114,7 +2114,7 @@ static struct commit *fake_working_tree_commit(struct diff_options *opt,
> case S_IFREG:
> if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) &&
> textconv_object(read_from, mode, null_sha1, &buf.buf, &buf_len)) {
> - buf.alloc = buf_len;
> + buf.alloc = buf_len + 1;
> buf.len = buf_len;
> }
> else if (strbuf_read_file(&buf, read_from, st.st_size) != st.st_size)Your patch is correct in the sense that this fixes a bug, but it just seems wrong to be touching the alloc parameter outside of the strbuf code. It looks like the intent is to do the equivalent of:
strbuf_add(&buf, some_heap_buf, len); free(some_heap_buf);
but avoid the extra allocation and copy. Should there be a "strbuf_attach" function to encapsulate this pattern?
-Peff