[master] aff516b77 vcc_acl: struct acl_e to miniobj

Nils Goroll nils.goroll at uplex.de
Sat Mar 27 13:40:07 UTC 2021


commit aff516b776039c5317b3ee8126e854984b22e2ab
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Sat Mar 27 14:13:02 2021 +0100

    vcc_acl: struct acl_e to miniobj
    
    note: struct acl_e could be compacted, but we prefer clarify over
    efficiency in VCC.

diff --git a/lib/libvcc/vcc_acl.c b/lib/libvcc/vcc_acl.c
index 6d0cd6b25..6f6591d7d 100644
--- a/lib/libvcc/vcc_acl.c
+++ b/lib/libvcc/vcc_acl.c
@@ -46,6 +46,8 @@
 #define ACL_MAXADDR	(sizeof(struct in6_addr) + 1)
 
 struct acl_e {
+	unsigned		magic;
+#define VCC_ACL_E_MAGIC	0xcac81e23
 	VRBT_ENTRY(acl_e)	branch;
 	unsigned char		data[ACL_MAXADDR];
 	unsigned		mask;
@@ -73,6 +75,9 @@ vcl_acl_cmp(const struct acl_e *ae1, const struct acl_e *ae2)
 	const unsigned char *p1, *p2;
 	unsigned m;
 
+	CHECK_OBJ_NOTNULL(ae1, VCC_ACL_E_MAGIC);
+	CHECK_OBJ_NOTNULL(ae2, VCC_ACL_E_MAGIC);
+
 	p1 = ae1->data;
 	p2 = ae2->data;
 	m = ae1->mask;
@@ -159,6 +164,7 @@ vcc_acl_insert_entry(struct vcc *tl, struct acl_e *aen)
 {
 	struct acl_e *ae2;
 
+	CHECK_OBJ_NOTNULL(aen, VCC_ACL_E_MAGIC);
 	ae2 = VRBT_INSERT(acl_tree, &tl->acl_tree, aen);
 	if (ae2 != NULL) {
 		if (ae2->not != aen->not) {
@@ -167,7 +173,7 @@ vcc_acl_insert_entry(struct vcc *tl, struct acl_e *aen)
 			VSB_cat(tl->sb, "vs:\n");
 			vcc_ErrWhere(tl, aen->t_addr);
 		}
-		free(aen);
+		FREE_OBJ(aen);
 		return;
 	}
 }
@@ -195,8 +201,7 @@ vcc_acl_add_entry(struct vcc *tl, const struct acl_e *ae, int l,
 	}
 
 	/* Make a copy from the template */
-	aen = TlAlloc(tl, sizeof *aen);
-	AN(aen);
+	ALLOC_OBJ(aen, VCC_ACL_E_MAGIC);
 	*aen = *ae;
 
 	aen->fixed = vcc_acl_chk(tl, ae, l, u, fam);
@@ -221,6 +226,7 @@ vcc_acl_try_getaddrinfo(struct vcc *tl, struct acl_e *ae)
 	unsigned char *u, i4, i6;
 	int error;
 
+	CHECK_OBJ_NOTNULL(ae, VCC_ACL_E_MAGIC);
 	memset(&hint, 0, sizeof hint);
 	hint.ai_family = PF_UNSPEC;
 	hint.ai_socktype = SOCK_STREAM;
@@ -319,6 +325,7 @@ vcc_acl_try_netnotation(struct vcc *tl, struct acl_e *ae)
 	unsigned u;
 	const char *p;
 
+	CHECK_OBJ_NOTNULL(ae, VCC_ACL_E_MAGIC);
 	memset(b, 0, sizeof b);
 	p = ae->addr;
 	for (i = 0; i < 4; i++) {
@@ -346,8 +353,7 @@ vcc_acl_entry(struct vcc *tl)
 	struct acl_e *ae;
 	char *sl, *e;
 
-	ae = TlAlloc(tl, sizeof *ae);
-	AN(ae);
+	ALLOC_OBJ(ae, VCC_ACL_E_MAGIC);
 
 	if (tl->t->tok == '!') {
 		ae->not = 1;
@@ -379,14 +385,14 @@ vcc_acl_entry(struct vcc *tl)
 		if (*e != '\0') {
 			VSB_cat(tl->sb, ".../mask is not numeric.\n");
 			vcc_ErrWhere(tl, ae->t_addr);
-			free(ae);
+			FREE_OBJ(ae);
 			return;
 		}
 		ae->t_mask = ae->t_addr;
 		if (tl->t->tok == '/') {
 			VSB_cat(tl->sb, "/mask only allowed once.\n");
 			vcc_ErrWhere(tl, tl->t);
-			free(ae);
+			FREE_OBJ(ae);
 			return;
 		}
 	} else if (tl->t->tok == '/') {
@@ -416,6 +422,7 @@ vcc_acl_emit_tokens(const struct vcc *tl, const struct acl_e *ae)
 	struct token *t;
 	const char *sep = "";
 
+	CHECK_OBJ_NOTNULL(ae, VCC_ACL_E_MAGIC);
 	t = ae->t_addr;
 	do {
 		if (t->tok == CSTR) {


More information about the varnish-commit mailing list