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

Re: [PATCH] blame.c: prepare_lines should not call xrealloc for every line

From
Philip Oakley <philipoakley@iee.org>
Date
Feb 4, 2014, 22:45 UTC
Message-ID
<303363DDF4184D37A3D5A52147EE728B@PhilipOakley>
In-Reply-To
<79CA69ED4EBA4271A40DE714AEEA5424@PhilipOakley>
From: "Philip Oakley" <philipoakley@iee.org>
Show 7 quoted lines
> From: "David Kastrup" <dak@gnu.org>
> To: "Junio C Hamano" <gitster@pobox.com>
> Cc: <git@vger.kernel.org>
> Sent: Tuesday, February 04, 2014 9:09 PM
> Subject: Re: [PATCH] blame.c: prepare_lines should not call xrealloc 
> for every line
>
[...]
Show 16 quoted lines
>>
>> Where's the difference?  This is exactly what will happen with my 
>> code
>> as well.  I _do_ rely on memchr(whatever, '\n', 0) to return NULL
>> without looking at any memory for that.  If there is a fear of memchr
>> not being able to deal with a count of 0, this code needs to be 
>> somewhat
>> more complex.
>
> A bit of googling found 
> http://marc.info/?l=gnulib-bug&m=130108029329021 which suggests that 
> behaviour can't be relied upon, and that perhaps some code is 'buggy' 
> relative to expectations (hence the patch it proposed).
>
> It suggests that one can't properly reference a zero length object.
>

I think I've confused myself between the patch https://lkml.org/lkml/2010/11/24/429 which fixed a bug in memchr() and the discussion in http://lists.gnu.org/archive/html/bug-gnulib/2011-03/msg00273.html (alternate link to marc.info) that discusses realloc() which has " we changed gnulib's test-memchr to instead test memchr(zerosize_ptr(),a,0) rather than memchr(NULL,a,0). However, once you can handle memchr(,0) on any other zero-size object, most implementations also happen to do what you want for memchr(NULL,a,0), even though it is technically undefined behavior." ending with 'technically undefined behavior' which I misconstrued.

Apologies for the noise.
Show 5 quoted lines
>>
>>>  I do not remember if the rest of the logic
>>>  actually depends on it (I think I use lineno[n+1] - lineno[n] to
>>>  find the end of line,
>>
...
Show 6 quoted lines
>> -- 
>> David Kastrup
>> --
>
> Philip
> --
Previous: Philip OakleyNext: Junio C Hamano
Message 7 of 23 in “blame.c: prepare_lines should not call xrealloc for every line”
  1. blame.c: prepare_lines should not call xrealloc for every lineDavid Kastrup, Feb 4, 2014
  2. David KastrupFeb 4, 2014
  3. Junio C HamanoFeb 4, 2014
  4. Junio C HamanoFeb 4, 2014
  5. David KastrupFeb 4, 2014
  6. Philip OakleyFeb 4, 2014
  7. Philip OakleyFeb 4, 2014
  8. Junio C HamanoFeb 4, 2014
  9. David KastrupFeb 4, 2014
  10. Junio C HamanoFeb 4, 2014
  11. David KastrupFeb 4, 2014
  12. Junio C HamanoFeb 4, 2014
  13. David KastrupFeb 4, 2014
  14. Junio C HamanoFeb 4, 2014
  15. David KastrupFeb 4, 2014
  16. Junio C HamanoFeb 4, 2014
  17. David KastrupFeb 5, 2014
  18. Junio C HamanoFeb 5, 2014
  19. David KastrupFeb 6, 2014
  20. David KastrupFeb 6, 2014
  21. David KastrupFeb 5, 2014
  22. Junio C HamanoFeb 5, 2014
  23. David KastrupFeb 5, 2014

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.