[master] 35bc77071 VMOD_Panic: avoid double panic with NULL vcs/version

Nils Goroll nils.goroll at uplex.de
Wed Apr 9 14:26:07 UTC 2025


commit 35bc77071a16430cafcdb7ef1e89bc6e43f5539a
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Wed Apr 9 16:15:52 2025 +0200

    VMOD_Panic: avoid double panic with NULL vcs/version
    
    seen:
    
     §5  0x000055a60d249491 in VAS_Fail (func=0x55a60d2b6456 "VSB_quote_pfx", file=0x55a60d2b6372 "vsb.c", line=545,
         cond=0x55a60d27e06d "p != NULL", kind=VAS_ASSERT) at vas.c:67
     §6  0x000055a60d2587d5 in VSB_quote_pfx (s=0x55a60d2f4d78 <pan_vsb_storage>, pfx=0x55a60d2b192e "", v=0x0, len=-1,
         how=8) at vsb.c:545
     §7  0x000055a60d258d41 in VSB_quote (s=0x55a60d2f4d78 <pan_vsb_storage>, v=0x0, len=-1, how=8) at vsb.c:652
     §8  0x000055a60d1cb946 in VMOD_Panic (vsb=0x55a60d2f4d78 <pan_vsb_storage>) at cache/cache_vrt_vmod.c:214

diff --git a/bin/varnishd/cache/cache_vrt_vmod.c b/bin/varnishd/cache/cache_vrt_vmod.c
index 3b5e7c564..ca5e37c65 100644
--- a/bin/varnishd/cache/cache_vrt_vmod.c
+++ b/bin/varnishd/cache/cache_vrt_vmod.c
@@ -198,6 +198,8 @@ VPI_Vmod_Unload(VRT_CTX, struct vmod **hdl)
 	FREE_OBJ(v);
 }
 
+#define nvl(x, y) ((x) ? (x) : (y))
+
 void
 VMOD_Panic(struct vsb *vsb)
 {
@@ -211,9 +213,9 @@ VMOD_Panic(struct vsb *vsb)
 		VSB_printf(vsb, "p=%p, abi=\"%s\", vrt=%u.%u,\n",
 			   v, v->abi, v->vrt_major, v->vrt_minor);
 		VSB_bcat(vsb, "vcs=", 4);
-		VSB_quote(vsb, v->vcs, -1, VSB_QUOTE_CSTR);
+		VSB_quote(vsb, nvl(v->vcs, ""), -1, VSB_QUOTE_CSTR);
 		VSB_bcat(vsb, ", version=", 10);
-		VSB_quote(vsb, v->version, -1, VSB_QUOTE_CSTR);
+		VSB_quote(vsb, nvl(v->version, ""), -1, VSB_QUOTE_CSTR);
 		VSB_indent(vsb, -2);
 		VSB_bcat(vsb, "},\n", 3);
 	}


More information about the varnish-commit mailing list