mirror of
https://github.com/tmux/tmux.git
synced 2024-12-24 10:08:48 +00:00
Handle NULL client (in config file) when showing a status message; also
copy the file when processing if-shell since it may be freed. GitHub issue 3746.
This commit is contained in:
parent
1a14d6d2e1
commit
88fd1f00b8
@ -761,6 +761,7 @@ args_make_commands_prepare(struct cmd *self, struct cmdq_item *item, u_int idx,
|
||||
struct args_value *value;
|
||||
struct args_command_state *state;
|
||||
const char *cmd;
|
||||
const char *file;
|
||||
|
||||
state = xcalloc(1, sizeof *state);
|
||||
|
||||
@ -787,7 +788,8 @@ args_make_commands_prepare(struct cmd *self, struct cmdq_item *item, u_int idx,
|
||||
|
||||
if (wait)
|
||||
state->pi.item = item;
|
||||
cmd_get_source(self, &state->pi.file, &state->pi.line);
|
||||
cmd_get_source(self, &file, &state->pi.line);
|
||||
state->pi.file = xstrdup(file);
|
||||
state->pi.c = tc;
|
||||
if (state->pi.c != NULL)
|
||||
state->pi.c->references++;
|
||||
@ -842,6 +844,7 @@ args_make_commands_free(struct args_command_state *state)
|
||||
cmd_list_free(state->cmdlist);
|
||||
if (state->pi.c != NULL)
|
||||
server_client_unref(state->pi.c);
|
||||
free((void *)state->pi.file);
|
||||
free(state->cmd);
|
||||
free(state);
|
||||
}
|
||||
|
25
status.c
25
status.c
@ -472,17 +472,26 @@ void
|
||||
status_message_set(struct client *c, int delay, int ignore_styles,
|
||||
int ignore_keys, const char *fmt, ...)
|
||||
{
|
||||
struct timeval tv;
|
||||
va_list ap;
|
||||
struct timeval tv;
|
||||
va_list ap;
|
||||
char *s;
|
||||
|
||||
va_start(ap, fmt);
|
||||
xvasprintf(&s, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
log_debug("%s: %s", __func__, s);
|
||||
|
||||
if (c == NULL) {
|
||||
server_add_message("message: %s", s);
|
||||
free(s);
|
||||
return;
|
||||
}
|
||||
|
||||
status_message_clear(c);
|
||||
status_push_screen(c);
|
||||
|
||||
va_start(ap, fmt);
|
||||
xvasprintf(&c->message_string, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
server_add_message("%s message: %s", c->name, c->message_string);
|
||||
c->message_string = s;
|
||||
server_add_message("%s message: %s", c->name, s);
|
||||
|
||||
/*
|
||||
* With delay -1, the display-time option is used; zero means wait for
|
||||
|
Loading…
Reference in New Issue
Block a user