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

Re: [GSoC][RFC][PATCH 2/2] STRBUF_INIT_CONST: Adapting strbuf_* functions

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 19, 2020, 03:13 UTC
Message-ID
<xmqqv9o3gthb.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<CALH1-Xr3HVZzDn2-9EvmdiBWmxWQ-zfExM2LNJyR1wR+dgxRSQ@mail.gmail.com>
Robear Selwans <rwagih.rw@gmail.com> writes:
Show 9 quoted lines
>> Also, isn't "if (sb->alloc < sb->len)" too loose a check for the new
>> feature?  AFAICS in 1/2, a strbuf that is still borrowing a const
>> string always has sb->alloc==0.  Other instances of strbuf that
>> happens to satisify the above condition, e.g. (sb->len == 5 &&
>> sb->alloc == 1), is an error.  If we are to check the condition
>> about sb->len, shouldn't we diagnose such a case as an error, no?
> AFAIK after reading the documentation for `strbuf`, there is no other
> case where `sb->len > sb->alloc` as `alloc` needs to always be more
> than `len`. I'd like to be corrected if mistaken, though.

Yes, but the case that matters to _your_ use is sb->alloc == 0. You do not want to let a broken strbuf (presumably broken by changes other than your own) to pass, when you can detect it. And for that, paying attention to sb->len _might_ make sense, but then the check won't be

	if (sb->alloc < sb->len)
		make it mutable;
you'd rather be writing something like
	if (!sb->alloc)
		make it mutable;
	else if (sb->alloc < sb->len)
		BUG("somebody fed a corrupt strbuf to me");

If the primary purpose of make_mutable() is *not* about catching random strbuf corruption, then the whole "else if" part is not needed, and the check should become a equation only about sb->alloc, not a comparison between alloc and len (which would trigger for *both* your const-initialized strbuf *and* a corrupt one you did not anticipate to see).

Previous: Jeff KingNext: Robear Selwans
Message 6 of 8 in “Re: [GSoC][RFC][PATCH 2/2] STRBUF_INIT_CONST: Adapting strbuf_* functions”
  1. Abhishek KumarFeb 18, 2020
  2. Robear SelwansFeb 18, 2020
  3. Junio C HamanoFeb 18, 2020
  4. Robear SelwansFeb 19, 2020
  5. Jeff KingFeb 19, 2020
  6. Junio C HamanoFeb 19, 2020
  7. Robear SelwansFeb 19, 2020
  8. Junio C HamanoFeb 19, 2020

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.