[master] 0630b48 Copy the argument name to malloc'ed storage.

Poul-Henning Kamp phk at FreeBSD.org
Sat Aug 12 23:08:16 CEST 2017


commit 0630b480fa35b0f8d4dbf8b9e9bece6173f10010
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Sat Aug 12 14:31:23 2017 +0000

    Copy the argument name to malloc'ed storage.

diff --git a/bin/varnishd/mgt/mgt.h b/bin/varnishd/mgt/mgt.h
index 2a230db..0a4efbd 100644
--- a/bin/varnishd/mgt/mgt.h
+++ b/bin/varnishd/mgt/mgt.h
@@ -180,7 +180,7 @@ void mgt_DumpRstVsl(void);
 struct vsb *mgt_BuildVident(void);
 void MGT_Complain(const char *, const char *, ...) __v_printflike(2, 3);
 const void *MGT_Pick(const struct choice *, const char *, const char *);
-char **MGT_NamedArg(const char *arg, const char **name, const char *what);
+char **MGT_NamedArg(const char *, const char **, const char *);
 
 
 /* stevedore_mgt.c */
diff --git a/bin/varnishd/mgt/mgt_util.c b/bin/varnishd/mgt/mgt_util.c
index 9263af8..2431532 100644
--- a/bin/varnishd/mgt/mgt_util.c
+++ b/bin/varnishd/mgt/mgt_util.c
@@ -194,7 +194,9 @@ char **
 MGT_NamedArg(const char *spec, const char **name, const char *what)
 {
 	const char *p, *q;
+	char *r;
 	char **av;
+	int l;
 
 	ASSERT_MGT();
 	p = strchr(spec, '=');
@@ -214,6 +216,15 @@ MGT_NamedArg(const char *spec, const char **name, const char *what)
 
 	if (av[0] != NULL)
 		ARGV_ERR("%s\n", av[0]);
-	*name = p;
+	if (p == NULL) {
+		*name = NULL;
+	} else {
+		l = p - spec;
+		r = malloc(1L + l);
+		AN(r);
+		memcpy(r, spec, l);
+		r[l] = '\0';
+		*name = r;
+	}
 	return (av);
 }
diff --git a/bin/varnishd/storage/mgt_stevedore.c b/bin/varnishd/storage/mgt_stevedore.c
index 60791a7..f6ce78e 100644
--- a/bin/varnishd/storage/mgt_stevedore.c
+++ b/bin/varnishd/storage/mgt_stevedore.c
@@ -178,10 +178,10 @@ STV_Config(const char *spec)
 		bprintf(stv->ident, "s%u", seq++);
 	else {
 		/* XXX: no need for truncation once VSM ident becomes dynamic */
-		l = name - spec;
+		l = strlen(name);
 		if (l > sizeof stv->ident - 1)
 			l = sizeof stv->ident - 1;
-		bprintf(stv->ident, "%.*s", l, spec);
+		bprintf(stv->ident, "%.*s", l, name);
 	}
 
 	stv_check_ident(spec, stv->ident);



More information about the varnish-commit mailing list