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

Re: [PATCH 0/2] Add MEMZERO_ARRAY() macro and use it in coccinelle

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 13, 2025, 00:18 UTC
Message-ID
<xmqq5xabb5fg.fsf@gitster.g>
In-Reply-To
<20251210-toon-cocci-memzero-v1-0-ae916a79065b@iotcl.com>
Toon Claes <toon@iotcl.com> writes:
> In the first patch I'm addressing the outcome of the discussion on the
> patch, and in the second patch I'm fixing an edge-case I've encountered
> while using coccinelle.

Without the attached, the failure at CI is impossible to diagnose. A test that emits "you got some error messages", without showing what they are, is useless.

 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git i/Makefile w/Makefile
index 0bd502dc01..52e413f59a 100644
--- i/Makefile
+++ w/Makefile
@@ -3534,7 +3534,7 @@ else
 COCCICHECK_PATCH_MUST_BE_EMPTY_FILES = $(COCCICHECK_PATCHES_INTREE)
 endif
 coccicheck: $(COCCICHECK_PATCH_MUST_BE_EMPTY_FILES)
-	! grep -q ^ $(COCCICHECK_PATCH_MUST_BE_EMPTY_FILES) /dev/null
+	! grep ^ $(COCCICHECK_PATCH_MUST_BE_EMPTY_FILES) /dev/null
 
 # See contrib/coccinelle/README
 coccicheck-pending: coccicheck-test


And FYI, with this series merged in, I get the following from
'seen'.  I did not check if they contain any false positives (in
which case the new coccinelle rules for this rewrite may have to be
marked as "pending", not for real checking), or they are real
improvements we should adopt.

Thanks.


diff -u -p a/diffcore-delta.c b/diffcore-delta.c
--- a/diffcore-delta.c
+++ b/diffcore-delta.c
@@ -56,7 +56,7 @@ static struct spanhash_top *spanhash_reh
 			     st_mult(sizeof(struct spanhash), sz)));
 	new_spanhash->alloc_log2 = orig->alloc_log2 + 1;
 	new_spanhash->free = INITIAL_FREE(new_spanhash->alloc_log2);
-	memset(new_spanhash->data, 0, sizeof(struct spanhash) * sz);
+	MEMZERO_ARRAY(new_spanhash->data, sz);
 	for (i = 0; i < osz; i++) {
 		struct spanhash *o = &(orig->data[i]);
 		int bucket;
@@ -135,7 +135,7 @@ static struct spanhash_top *hash_chars(s
 			      st_mult(sizeof(struct spanhash), (size_t)1 << i)));
 	hash->alloc_log2 = i;
 	hash->free = INITIAL_FREE(i);
-	memset(hash->data, 0, sizeof(struct spanhash) * ((size_t)1 << i));
+	MEMZERO_ARRAY(hash->data, ((size_t)1 << i));
 
 	n = 0;
 	accum1 = accum2 = 0;
diff -u -p a/linear-assignment.c b/linear-assignment.c
--- a/linear-assignment.c
+++ b/linear-assignment.c
@@ -20,8 +20,8 @@ void compute_assignment(int column_count
 	int i, j, phase;
 
 	if (column_count < 2) {
-		memset(column2row, 0, sizeof(int) * column_count);
-		memset(row2column, 0, sizeof(int) * row_count);
+		MEMZERO_ARRAY(column2row, column_count);
+		MEMZERO_ARRAY(row2column, row_count);
 		return;
 	}
 
diff -u -p a/shallow.c b/shallow.c
--- a/shallow.c
+++ b/shallow.c
@@ -745,7 +745,7 @@ void assign_shallow_commits_to_refs(stru
 
 	if (used) {
 		int bitmap_size = DIV_ROUND_UP(pi.nr_bits, 32) * sizeof(uint32_t);
-		memset(used, 0, sizeof(*used) * info->shallow->nr);
+		MEMZERO_ARRAY(used, info->shallow->nr);
 		for (i = 0; i < nr_shallow; i++) {
 			const struct commit *c = lookup_commit(the_repository,
 							       &oid[shallow[i]]);
@@ -810,7 +810,7 @@ static void post_assign_shallow(struct s
 
 	trace_printf_key(&trace_shallow, "shallow: post_assign_shallow\n");
 	if (ref_status)
-		memset(ref_status, 0, sizeof(*ref_status) * info->ref->nr);
+		MEMZERO_ARRAY(ref_status, info->ref->nr);
 
 	/* Remove unreachable shallow commits from "theirs" */
 	for (i = dst = 0; i < info->nr_theirs; i++) {
Previous: Junio C Hamano
Message 10 of 10 in “Add MEMZERO_ARRAY() macro and use it in coccinelle”
  1. 0/2 Add MEMZERO_ARRAY() macro and use it in coccinelleToon Claes, Dec 10, 2025
  2. 1/2 git-compat-util: introduce MEMZERO_ARRAY() macroToon Claes, Dec 10, 2025
  3. Junio C HamanoDec 11, 2025
  4. René ScharfeDec 12, 2025
  5. Toon ClaesDec 19, 2025
  6. 2/2 contrib/coccinelle: pass include paths to spatch(1)Toon Claes, Dec 10, 2025
  7. Patrick SteinhardtDec 11, 2025
  8. Junio C HamanoDec 12, 2025
  9. Junio C HamanoDec 13, 2025
  10. Junio C HamanoDec 13, 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.