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

Re: [PATCH v2 2/4] string-list: replace negative index encoding with "exact_match" parameter

From
shejialuo <shejialuo@gmail.com>
Date
Oct 5, 2025, 14:11 UTC
Message-ID
<aOJ8fAZVQ8y1oMgR@ArchLinux>
In-Reply-To
<20250924053601.GC1173044@coredump.intra.peff.net>
On Wed, Sep 24, 2025 at 01:36:01AM -0400, Jeff King wrote:
Show 33 quoted lines
> On Tue, Sep 23, 2025 at 11:48:36AM -0700, Junio C Hamano wrote:
> 
> > >> 1. It prevents us from using the full range of size_t, which is
> > >>    necessary for large string list.
> > 
> > It is a disease to think that countable things must be counted in
> > size_t and it needs to be somehow cured.
> > 
> > It is a type to count the size of memory allocations, nothing more.
> > If you are holding 1000-bytes per the stuff you are counting, you
> > would not need the full range of size_t --- you'll ran out your
> > memory way before you fill size_t with the things you are counting.
> > 
> > When there is no external constraints (like you need to specify
> > exact size to describe a file format to be interoperable), the most
> > appropriate type to count things in is a platform natural "int".
> > You wouldn't be handling billions of strings in string-list anyway
> > (and that is smaller than half of 32-bit size_t; 64-bit size_t is
> > much larger).
> 
> I agree that size_t is much more than one needs for counting most
> things. But the problem is that "int" is much too small, if you are
> worried about malicious input causing integer overflows that could cause
> memory access errors.
> 
> A nice property of counting everything as size_t is that if we are
> storing even a single byte per item, we will fail to allocate before
> hitting an integer overflow. So no, we do not expect to store billions
> of strings. But it is not that hard to convince Git to allocate billions
> of items in a list on a 64-bit system with 32-bit ints. And it is nice
> to know that iterating over them or trying to extend the array will
> never hit an integer overflow bug.
> 
Make sense.
Show 22 quoted lines
> I'd say the "right" size for preventing overflows probably only needs to
> be 58-60 bits or so, since usually we are storing more than one byte
> (plus overhead). But 64-bit is the natural machine word size that
> matches what we want. However, we should _not_ be worried about losing
> one bit to making it signed, especially if that makes it less
> error-prone to convert instances of "int" to use "size_t". I would be
> surprised if an attacker could convince a program to truly use up half
> of its address space.
> 
> > >> 2. Using int for indices while other parts of the codebase use size_t
> > >>    creates signed comparison warnings when these values are compared.
> > 
> > The other thing may be (mis)using size_t when it should not be.  If
> > they were also using "int" that would also squelch the warnings from
> > "-Wsign-compare".
> 
> So I really care only about truncation and overflow above. Sign issues
> can cause bugs, of course, but the real issue is the size mismatch
> between "int" and "size_t". And while -Wsign-compare is sometimes an
> easy way to find those mismatches (because of the sign mismatch between
> them), it may bring more hassle than it's worth.
> 

That's right, I would improve my commit message to show the correct motivation.

Thanks, Jialuo

Previous: Jeff KingNext: shejialuo
Message 28 of 43 in “enhance string-list API to fix sign compare warnings”
  1. 0/4 enhance string-list API to fix sign compare warningsshejialuo, Sep 7, 2025
  2. 1/4 string-list: allow passing NULL for `get_entry_index`shejialuo, Sep 7, 2025
  3. Patrick SteinhardtSep 9, 2025
  4. 2/4 string-list: replace negative index encoding with "exact_match" parametershejialuo, Sep 7, 2025
  5. Patrick SteinhardtSep 9, 2025
  6. shejialuoSep 15, 2025
  7. 3/4 string-list: change "string_list_find_insert_index" return type to "size_t"shejialuo, Sep 7, 2025
  8. Patrick SteinhardtSep 9, 2025
  9. Junio C HamanoSep 9, 2025
  10. Patrick SteinhardtSep 10, 2025
  11. 4/4 refs: enable sign compare warnings checkshejialuo, Sep 7, 2025
  12. Patrick SteinhardtSep 9, 2025
  13. shejialuoSep 7, 2025
  14. 0/4 enhance string-list API to fix sign compare warningsshejialuo, Sep 17, 2025
  15. 1/4 string-list: use bool instead of int for "exact_match"shejialuo, Sep 17, 2025
  16. 2/4 string-list: replace negative index encoding with "exact_match" parametershejialuo, Sep 17, 2025
  17. Patrick SteinhardtSep 23, 2025
  18. shejialuoOct 5, 2025
  19. Karthik NayakSep 23, 2025
  20. Junio C HamanoSep 23, 2025
  21. Jeff KingSep 24, 2025
  22. Junio C HamanoSep 24, 2025
  23. Jeff KingSep 25, 2025
  24. Junio C HamanoSep 25, 2025
  25. Jeff KingOct 9, 2025
  26. Collin FunkOct 8, 2025
  27. Jeff KingOct 9, 2025
  28. shejialuoOct 5, 2025
  29. shejialuoOct 5, 2025
  30. 3/4 string-list: change "string_list_find_insert_index" return type to "size_t"shejialuo, Sep 17, 2025
  31. Karthik NayakSep 23, 2025
  32. shejialuoOct 5, 2025
  33. 4/4 refs: enable sign compare warnings checkshejialuo, Sep 17, 2025
  34. 0/4 enhance string-list API to fix sign compare warningsshejialuo, Oct 6, 2025
  35. 1/4 string-list: use bool instead of int for "exact_match"shejialuo, Oct 6, 2025
  36. 2/4 string-list: replace negative index encoding with "exact_match" parametershejialuo, Oct 6, 2025
  37. 3/4 string-list: change "string_list_find_insert_index" return type to "size_t"shejialuo, Oct 6, 2025
  38. Jeff KingOct 9, 2025
  39. 4/4 refs: enable sign compare warnings checkshejialuo, Oct 6, 2025
  40. Junio C HamanoOct 6, 2025
  41. Collin FunkOct 8, 2025
  42. Junio C HamanoOct 8, 2025
  43. Karthik NayakOct 8, 2025

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.