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

[PATCH 1/2] coccinelle: detect struct strbuf passed by value

From
Deveshi Dwivedi <deveshigurgaon@gmail.com>
Date
Mar 15, 2026, 09:44 UTC
Message-ID
<20260315094445.19849-2-deveshigurgaon@gmail.com>
In-Reply-To
<20260315094445.19849-1-deveshigurgaon@gmail.com>

Passing a struct strbuf by value to a function copies the struct but shares the underlying character array between caller and callee. If the callee causes a reallocation, the caller's copy becomes a dangling pointer, leading to a double-free when strbuf_release() is called. There is no coccinelle rule to catch this pattern.

Jeff King suggested adding one during review of the write_worktree_linking_files() fix [1], and noted that a reporting rule using coccinelle's Python scripting extensions could emit a descriptive warning, but we do not currently require Python support in coccinelle.

Add a transformation rule that rewrites a by-value strbuf parameter to a pointer. The detection is identical to what a Python-based reporting rule would catch; only the presentation differs. The resulting diff will not produce compilable code on its own (callers and the function body still need updating), but the spatch output alerts the developer that the signature needs attention. This is consistent with the other rules in strbuf.cocci, which also rewrite to the preferred form.

[1] https://lore.kernel.org/git/20260309192600.GC309867@coredump.intra.peff.net/
Signed-off-by: Deveshi Dwivedi <deveshigurgaon@gmail.com>
---
 contrib/coccinelle/strbuf.cocci | 11 +++++++++++
 1 file changed, 11 insertions(+)
diff --git a/contrib/coccinelle/strbuf.cocci b/contrib/coccinelle/strbuf.cocci
index 5f06105df6..83bd93be5f 100644
--- a/contrib/coccinelle/strbuf.cocci
+++ b/contrib/coccinelle/strbuf.cocci
@@ -60,3 +60,14 @@ expression E1, E2;
 @@
 - strbuf_addstr(E1, real_path(E2));
 + strbuf_add_real_path(E1, E2);
+
+@@
+identifier fn, param;
+@@
+  fn(...,
+- struct strbuf param
++ struct strbuf *param
+  ,...)
+  {
+  ...
+  }
-- 
2.52.0.230.gd8af7cadaa
Previous: Deveshi DwivediNext: Deveshi Dwivedi
Message 2 of 4 in “coccinelle: detect and fix strbuf-by-value parameters”
  1. 0/2 coccinelle: detect and fix strbuf-by-value parametersDeveshi Dwivedi, Mar 15, 2026
  2. 1/2 coccinelle: detect struct strbuf passed by valueDeveshi Dwivedi, Mar 15, 2026
  3. 2/2 stash: do not pass strbuf by valueDeveshi Dwivedi, Mar 15, 2026
  4. Junio C HamanoMar 16, 2026

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.