diff options
author | Tiago Cunha <tcunha@gmx.com> | 2009-11-19 22:25:52 +0000 |
---|---|---|
committer | Tiago Cunha <tcunha@gmx.com> | 2009-11-19 22:25:52 +0000 |
commit | 563f34477a74ecdc7b666269b2837ac5e262b3da (patch) | |
tree | 1edb61fcbb8255453c8c1cdb2af50b1385d89eed /status.c | |
parent | a5ae0dc216364b9112d759c2ebe93b4478733929 (diff) | |
download | rtmux-563f34477a74ecdc7b666269b2837ac5e262b3da.tar.gz rtmux-563f34477a74ecdc7b666269b2837ac5e262b3da.tar.bz2 rtmux-563f34477a74ecdc7b666269b2837ac5e262b3da.zip |
Sync OpenBSD patchset 549:
Don't interpret #() for display-message, it usually doesn't make sense and may
leak commands.
Diffstat (limited to 'status.c')
-rw-r--r-- | status.c | 32 |
1 files changed, 23 insertions, 9 deletions
@@ -1,4 +1,4 @@ -/* $Id: status.c,v 1.129 2009-11-19 22:20:04 tcunha Exp $ */ +/* $Id: status.c,v 1.130 2009-11-19 22:25:52 tcunha Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net> @@ -107,14 +107,14 @@ status_redraw(struct client *c) /* Work out the left and right strings. */ left = status_replace(c, options_get_string( - &s->options, "status-left"), c->status_timer.tv_sec); + &s->options, "status-left"), c->status_timer.tv_sec, 1); llen = options_get_number(&s->options, "status-left-length"); llen2 = screen_write_cstrlen(utf8flag, "%s", left); if (llen2 < llen) llen = llen2; right = status_replace(c, options_get_string( - &s->options, "status-right"), c->status_timer.tv_sec); + &s->options, "status-right"), c->status_timer.tv_sec, 1); rlen = options_get_number(&s->options, "status-right-length"); rlen2 = screen_write_cstrlen(utf8flag, "%s", right); if (rlen2 < rlen) @@ -319,7 +319,7 @@ out: } char * -status_replace(struct client *c, const char *fmt, time_t t) +status_replace(struct client *c, const char *fmt, time_t t, int run_jobs) { struct session *s = c->session; struct winlink *wl = s->curw; @@ -355,11 +355,25 @@ status_replace(struct client *c, const char *fmt, time_t t) ptr = NULL; switch (*iptr++) { case '(': - if (ptr == NULL) { - ptr = status_job(c, &iptr); - if (ptr == NULL) - break; - savedptr = ptr; + if (run_jobs) { + if (ptr == NULL) { + ptr = status_job(c, &iptr); + if (ptr == NULL) + break; + savedptr = ptr; + } + } else { + /* Don't run jobs. Copy to ). */ + *optr++ = '#'; + + iptr--; /* include [ */ + while (*iptr != ')' && *iptr != '\0') { + if (optr >= + out + (sizeof out) - 1) + break; + *optr++ = *iptr++; + } + break; } /* FALLTHROUGH */ case 'H': |