[master] d5c981a14 Refactor: relax match in take_obj_notnull.cocci to catch more cases

Nils Goroll nils.goroll at uplex.de
Sun Oct 27 14:10:09 UTC 2024


commit d5c981a14e145e00f63cf2a632b225f1c2eaac9e
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Sun Oct 27 15:04:24 2024 +0100

    Refactor: relax match in take_obj_notnull.cocci to catch more cases
    
    We have some places in the code where the verbatim "take obj" semantics do not
    have setting the pointer to NULL immediately following.

diff --git a/bin/varnishd/cache/cache_gzip.c b/bin/varnishd/cache/cache_gzip.c
index a7402ca56..74a7f4e0f 100644
--- a/bin/varnishd/cache/cache_gzip.c
+++ b/bin/varnishd/cache/cache_gzip.c
@@ -345,10 +345,9 @@ vdp_gunzip_fini(struct vdp_ctx *vdc, void **priv)
 	struct vgz *vg;
 
 	(void)vdc;
-	CAST_OBJ_NOTNULL(vg, *priv, VGZ_MAGIC);
+	TAKE_OBJ_NOTNULL(vg, priv, VGZ_MAGIC);
 	AN(vg->m_buf);
 	(void)VGZ_Destroy(&vg);
-	*priv = NULL;
 	return (0);
 }
 
diff --git a/bin/varnishd/cache/cache_range.c b/bin/varnishd/cache/cache_range.c
index a9a86abc2..8bdd8e8df 100644
--- a/bin/varnishd/cache/cache_range.c
+++ b/bin/varnishd/cache/cache_range.c
@@ -54,13 +54,13 @@ vrg_range_fini(struct vdp_ctx *vdc, void **priv)
 	struct vrg_priv *vrg_priv;
 
 	CHECK_OBJ_NOTNULL(vdc, VDP_CTX_MAGIC);
-	CAST_OBJ_NOTNULL(vrg_priv, *priv, VRG_PRIV_MAGIC);
+	TAKE_OBJ_NOTNULL(vrg_priv, priv, VRG_PRIV_MAGIC);
 	if (vrg_priv->req->resp_len >= 0 &&
 	    vrg_priv->range_off < vrg_priv->range_high) {
 		Req_Fail(vrg_priv->req, SC_RANGE_SHORT);
 		vrg_priv->req->vdc->retval = -1;
 	}
-	*priv = NULL;	/* struct on ws, no need to free */
+	/* struct on ws, no need to free */
 	return (0);
 }
 
diff --git a/tools/coccinelle/take_obj_notnull.cocci b/tools/coccinelle/take_obj_notnull.cocci
index f99009c06..04ad2f134 100644
--- a/tools/coccinelle/take_obj_notnull.cocci
+++ b/tools/coccinelle/take_obj_notnull.cocci
@@ -75,13 +75,15 @@ expression obj, priv, magic;
 @@
 
 - CAST_OBJ_NOTNULL(obj, *priv, magic);
-- *priv = NULL;
 + TAKE_OBJ_NOTNULL(obj, priv, magic);
+...
+- *priv = NULL;
 
 @@
 expression obj, priv, magic;
 @@
 
 - CAST_OBJ_NOTNULL(obj, priv, magic);
-- priv = NULL;
 + TAKE_OBJ_NOTNULL(obj, &priv, magic);
+...
+- priv = NULL;
diff --git a/vmod/vmod_debug_filters.c b/vmod/vmod_debug_filters.c
index e0de9ba19..f810e8d68 100644
--- a/vmod/vmod_debug_filters.c
+++ b/vmod/vmod_debug_filters.c
@@ -292,11 +292,10 @@ xyzzy_pedantic_fini(struct vdp_ctx *vdc, void **priv)
 	AN(priv);
 	if (*priv == NULL)
 		return (0);
-	CAST_OBJ_NOTNULL(vdps, *priv, VDP_STATE_MAGIC);
+	TAKE_OBJ_NOTNULL(vdps, priv, VDP_STATE_MAGIC);
 	assert(vdps->state == VDPS_INIT || vdps->state == VDPS_END);
 	vdps->state = VDPS_FINI;
 
-	*priv = NULL;
 	return (0);
 }
 
@@ -497,8 +496,7 @@ xyzzy_chksha256_fini(struct vdp_ctx *vdc, void **priv)
 	AN(priv);
 	if (*priv == NULL)
 		return (0);
-	CAST_OBJ_NOTNULL(vdps, *priv, VDP_CHKSHA256_MAGIC);
-	*priv = NULL;
+	TAKE_OBJ_NOTNULL(vdps, priv, VDP_CHKSHA256_MAGIC);
 
 	VSHA256_Final(digest, vdps->cx);
 	r = memcmp(digest, vdps->cfg->expected, sizeof digest);
@@ -542,8 +540,7 @@ xyzzy_chkcrc32_fini(struct vdp_ctx *vdc, void **priv)
 	AN(priv);
 	if (*priv == NULL)
 		return (0);
-	CAST_OBJ_NOTNULL(vdps, *priv, VDP_CHKCRC32_MAGIC);
-	*priv = NULL;
+	TAKE_OBJ_NOTNULL(vdps, priv, VDP_CHKCRC32_MAGIC);
 
 	if (vdps->crc == vdps->cfg->expected)
 		return (0);


More information about the varnish-commit mailing list