Hi Junio, On Wed, 26 Apr 2017, Junio C Hamano wrote: > Johannes Schindelin <johannes.schindelin@xxxxxx> writes: > > > Discovered by Coverity. > > > > Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> > > --- > > builtin/cat-file.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/builtin/cat-file.c b/builtin/cat-file.c > > index 1890d7a6390..9af863e7915 100644 > > --- a/builtin/cat-file.c > > +++ b/builtin/cat-file.c > > @@ -165,6 +165,7 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name, > > die("git cat-file %s: bad file", obj_name); > > > > write_or_die(1, buf, size); > > + free(buf); > > return 0; > > } > > This is a border-line "Meh". Just like we do not free resources > immediately before calling die(), we can leave this as-is as the > only thing that happens after this is a return from cmd_cat_file() > back to main() that exits. If you are mostly concerned about the status quo, that is true. I am a lot more concerned with future changes, where we may easily decide that it is time to move a file-local function out of its hiding place and make it more usable. >From that perspective, it is one thing to have a blatant memory leak in a cmd_*() function, and it is an entirely different matter to have such a leak in a function that happens to be called only from cmd_*() functions: somebody familiar enough with Git's coding conventions (such as myself) will *expect* cmd_*() to have leaks left and right and pay attention when libifying that code, but be a lot less concerned about such leaks in other functions. And of course this concerns me more than you, as I am still trying to drive forward the effort to convert more scripts into builtins. So on my own behalf: thank you for accepting this patch. Ciao, Dscho