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

[PATCH 4/4] rerere: modernize use of empty strbuf

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 24, 2023, 20:54 UTC
Message-ID
<20230824205456.1231371-5-gitster@pobox.com>
In-Reply-To
<20230824205456.1231371-1-gitster@pobox.com>

Back when the code in the handle_conflict() helper function that hashes the contents stored in the strbuf "one" and "two", including its terminating NUL, was written, a freshly initialized strbuf had NULL in its .buf member, so it was an error to say

    update(one.buf, one.len + 1)

which was corrected by b4833a2c (rerere: Fix use of an empty strbuf.buf, 2007-09-26).

But soon after that, b315c5c0 (strbuf change: be sure ->buf is never ever NULL., 2007-09-27) introduced strbuf_slopbuf mechanism that ensures that .buf member of a strbuf is *never* NULL. A freshly initialized and empty strbuf uses a static piece of memory that has NUL in it, with its .len member set to 0, so we can always safely use from offset 0 of .buf[] array for (one.len + 1) bytes.

Simplify the code by essentially reverting the b4833a2c, whose fix is no longer necessary in the modern world order.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 rerere.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/rerere.c b/rerere.c
index 6bc3c54d3b..69a61aac93 100644
--- a/rerere.c
+++ b/rerere.c
@@ -390,12 +390,8 @@ static int handle_conflict(struct strbuf *out, struct rerere_io *io,
 			strbuf_addbuf(out, &two);
 			rerere_strbuf_putconflict(out, '>', marker_size);
 			if (ctx) {
-				the_hash_algo->update_fn(ctx, one.buf ?
-							 one.buf : "",
-							 one.len + 1);
-				the_hash_algo->update_fn(ctx, two.buf ?
-							 two.buf : "",
-							 two.len + 1);
+				the_hash_algo->update_fn(ctx, one.buf, one.len + 1);
+				the_hash_algo->update_fn(ctx, two.buf, two.len + 1);
 			}
 			break;
 		} else if (hunk == RR_SIDE_1)
-- 
2.42.0-29-gcd9da15a85
Previous: Junio C HamanoNext: Junio C Hamano
Message 4 of 5 in “code clean-up for rerere”
  1. 0/4 code clean-up for rerereJunio C Hamano, Aug 24, 2023
  2. 3/4 rerere: try_merge() should use LL_MERGE_ERROR when it means an errorJunio C Hamano, Aug 24, 2023
  3. 1/4 rerere: simplify check_one_conflict() helper functionJunio C Hamano, Aug 24, 2023
  4. 4/4 rerere: modernize use of empty strbufJunio C Hamano, Aug 24, 2023
  5. 2/4 rerere: fix comment on handle_file() helperJunio C Hamano, Aug 24, 2023

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.