[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