From: Jeff King Date: Mon, 07 Nov 2011 16:49:46 GMT Subject: Re: [PATCH] blame.c: Properly initialize strbuf after calling textconv_object(), again 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: > --- 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