git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] alloc_ref(): allow for trailing NUL

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Sep 28, 2007, 12:01 UTC
Message-ID
<Pine.LNX.4.64.0709281259050.28395@racer.site>
In-Reply-To
<7vhclfqisq.fsf@gitster.siamese.dyndns.org>
Hi,
On Fri, 28 Sep 2007, Junio C Hamano wrote:
Show 31 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> > On Fri, 28 Sep 2007, Johannes Schindelin wrote:
> >
> >> The parameter name "namelen" suggests that you pass the equivalent of
> >> strlen() to the function alloc_ref().  However, this function did not
> >> allocate enough space to put a NUL after the name.
> >> 
> >> Since struct ref does not have any member to describe the length of the
> >> string, this just does not make sense.
> >> 
> >> So make space for the NUL.
> >
> > Good point, but shouldn't you then fix call sites that use strlen(name) + 
> > 1?
> 
> Good point.
> 
> I audited "git grep -A2 -B4 -e alloc_ref next master" output,
> and it appears almost everybody knows alloc_ref() wants the
> caller to count the terminating NUL.
> 
> There however are a few gotchas.
> 
>  * There is one overallocation in connect.c, which would not
>    hurt but is wasteful;
> 
>  * next:transport.c has alloc_ref(strlen(e->name)) which is a
>    no-no;
> 
> Discarding Johannes's patch, the following would fix it.
But should the signature of alloc_ref() not be changed, then, to read
	struct ref *alloc_ref(unsigned name_alloc);
Hm?

Further, I am quite sure that the same mistake will happen again, until we change the function to get the name length, not the number of bytes to allocate.

Ciao, Dscho

Previous: Junio C HamanoNext: Pierre Habouzit
Message 4 of 9 in “alloc_ref(): allow for trailing NUL”
  1. alloc_ref(): allow for trailing NULJohannes Schindelin, Sep 28, 2007
  2. Daniel BarkalowSep 28, 2007
  3. Junio C HamanoSep 28, 2007
  4. Johannes SchindelinSep 28, 2007
  5. Pierre HabouzitSep 28, 2007
  6. Pierre HabouzitSep 28, 2007
  7. Daniel BarkalowSep 28, 2007
  8. Johannes SchindelinSep 28, 2007
  9. Junio C HamanoSep 28, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.