Expand formats again inside #(), and free the temporaries.
authornicm <nicm@openbsd.org>
Fri, 29 May 2015 23:12:38 +0000 (23:12 +0000)
committernicm <nicm@openbsd.org>
Fri, 29 May 2015 23:12:38 +0000 (23:12 +0000)
usr.bin/tmux/format.c

index f7bbd89..9a8be29 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: format.c,v 1.68 2015/05/27 13:28:04 nicm Exp $ */
+/* $OpenBSD: format.c,v 1.69 2015/05/29 23:12:38 nicm Exp $ */
 
 /*
  * Copyright (c) 2011 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -490,7 +490,7 @@ format_expand_time(struct format_tree *ft, const char *fmt, time_t t)
 char *
 format_expand(struct format_tree *ft, const char *fmt)
 {
-       char            *buf, *tmp;
+       char            *buf, *tmp, *cmd;
        const char      *ptr, *s;
        size_t           off, len, n, slen;
        int              ch, brackets;
@@ -530,10 +530,14 @@ format_expand(struct format_tree *ft, const char *fmt)
                        tmp = xmalloc(n + 1);
                        memcpy(tmp, fmt, n);
                        tmp[n] = '\0';
+                       cmd = format_expand(ft, tmp);
 
-                       s = format_job_get(ft, tmp);
+                       s = format_job_get(ft, cmd);
                        slen = strlen(s);
 
+                       free(cmd);
+                       free(tmp);
+
                        while (len - off < slen + 1) {
                                buf = xreallocarray(buf, 2, len);
                                len *= 2;