Subject: Re: [PATCH] checkout-index.c: Unconditionally free memory

From: Jeff King <[email-masked]>
Date: Fri, 1 May 2015 15:50:18 -0400

On Fri, May 01, 2015 at 12:28:27PM -0700, Stefan Beller wrote:

> It's safe to free the char pointer `p` unconditionally.
> 
> The pointer is assigned just 2 lines earlier as a return from
> prefix_path, which allocates new memory for its return value.
> 
> Then it is used in checkout_file, which passes the pointer on to
> cache_name_pos and write_tempfile_record, both of which do not store
> the pointer in any permanent record.
> 
> So the condition on when to free the pointer is just "always".

That of course makes me wonder why somebody would write this in the
first place. :)

It looks like it comes from be65e7d (Fix users of prefix_path() to
free() only when necessary, 2006-05-07), which claims that prefix_path
sometimes does not allocate. When did that change? Looks like maybe
d089eba (setup: sanitize absolute and funny paths in get_pathspec(),
2008-01-28), but it certainly is the case now.

Probably all of the other sites touched by be65e7d could use the same
treatment.

-Peff