commit 3198f30f89dee7172b30744be22404fbc1cfe8ac from: Omar Polo date: Thu Aug 26 10:07:37 2021 UTC correctly parse multiple attributes commit - f3c7d9604106a82141e9ab7f14b388d3a8cea8eb commit + 3198f30f89dee7172b30744be22404fbc1cfe8ac blob - f6cb1fa1a330e902fc0b8ce9833f98412afb3226 blob + 760d2ffadc45202fef40f0f5fc8b2198b1f5c33f --- parse.y +++ parse.y @@ -59,7 +59,7 @@ static void setvari(char *, int); static void setvars(char *, char *); static int colorname(const char *); static void setcolor(const char *, const char *, const char *); -static int attrname(char *); +static int attrname(const char *); static void setattr(char *, char *, char *); static void add_proxy(char *, char *); static void bindkey(const char *, const char *, const char *); @@ -400,7 +400,7 @@ setcolor(const char *prfx, const char *line, const cha } static int -attrname(char *n) +attrname(const char *n) { struct { const char *name; @@ -416,10 +416,15 @@ attrname(char *n) { NULL, 0 }, }; int ret, found; - char *ap; + char *ap, *dup, *orig; + + if ((dup = strdup(n)) == NULL) + err(1, "strdup"); + orig = dup; + ret = 0; - while ((ap = strsep(&n, ",")) != NULL) { + while ((ap = strsep(&dup, ",")) != NULL) { if (*ap == '\0') continue; @@ -437,6 +442,7 @@ attrname(char *n) ap, yylval.colno+1); } + free(orig); return ret; }