From 78da5a3756a9f51f8e49d2975f74a1ea800b58b6 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Aug 2021 06:36:05 +0000 Subject: [PATCH 1/3] Start inputs as NULL so not freeing random stack garbage, GitHub issue 2852. --- cmd-command-prompt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd-command-prompt.c b/cmd-command-prompt.c index a877897e..bca1a7fc 100644 --- a/cmd-command-prompt.c +++ b/cmd-command-prompt.c @@ -77,7 +77,7 @@ cmd_command_prompt_exec(struct cmd *self, struct cmdq_item *item) const char *type, *s, *input; struct cmd_command_prompt_cdata *cdata; char *tmp, *prompts, *prompt, *next_prompt; - char *inputs, *next_input; + char *inputs = NULL, *next_input; u_int count = args_count(args); int wait = !args_has(args, 'b'), space = 1; From a252fadf8a6df72e4a417de2668bffa971455193 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Aug 2021 07:09:30 +0000 Subject: [PATCH 2/3] Fix up some printflike attributes. --- control.c | 2 +- log.c | 5 +---- tmux.h | 12 +++++++----- xmalloc.h | 2 ++ 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/control.c b/control.c index efcbc0ff..359d0e78 100644 --- a/control.c +++ b/control.c @@ -386,7 +386,7 @@ control_pause_pane(struct client *c, struct window_pane *wp) } /* Write a line. */ -static void +static void printflike(2, 0) control_vwrite(struct client *c, const char *fmt, va_list ap) { struct control_state *cs = c->control_state; diff --git a/log.c b/log.c index 3387ab0c..ec54711a 100644 --- a/log.c +++ b/log.c @@ -30,9 +30,6 @@ static FILE *log_file; static int log_level; -static void log_event_cb(int, const char *); -static void log_vwrite(const char *, va_list); - /* Log callback for libevent. */ static void log_event_cb(__unused int severity, const char *msg) @@ -101,7 +98,7 @@ log_close(void) } /* Write a log message. */ -static void +static void printflike(1, 0) log_vwrite(const char *msg, va_list ap) { char *fmt, *out; diff --git a/tmux.h b/tmux.h index 6bdc7e6a..668ca270 100644 --- a/tmux.h +++ b/tmux.h @@ -2342,7 +2342,7 @@ struct cmdq_item *cmdq_get_callback1(const char *, cmdq_cb, void *); struct cmdq_item *cmdq_get_error(const char *); struct cmdq_item *cmdq_insert_after(struct cmdq_item *, struct cmdq_item *); struct cmdq_item *cmdq_append(struct client *, struct cmdq_item *); -void cmdq_insert_hook(struct session *, struct cmdq_item *, +void printflike(4, 5) cmdq_insert_hook(struct session *, struct cmdq_item *, struct cmd_find_state *, const char *, ...); void cmdq_continue(struct cmdq_item *); u_int cmdq_next(struct client *); @@ -2398,7 +2398,7 @@ void file_fire_done(struct client_file *); void file_fire_read(struct client_file *); int file_can_print(struct client *); void printflike(2, 3) file_print(struct client *, const char *, ...); -void file_vprint(struct client *, const char *, va_list); +void printflike(2, 0) file_vprint(struct client *, const char *, va_list); void file_print_buffer(struct client *, void *, size_t); void printflike(2, 3) file_error(struct client *, const char *, ...); void file_write(struct client *, const char *, int, const void *, size_t, @@ -2498,7 +2498,8 @@ struct style_range *status_get_range(struct client *, u_int, u_int); void status_init(struct client *); void status_free(struct client *); int status_redraw(struct client *); -void status_message_set(struct client *, int, int, int, const char *, ...); +void printflike(5, 6) status_message_set(struct client *, int, int, int, + const char *, ...); void status_message_clear(struct client *); int status_message_redraw(struct client *); void status_prompt_set(struct client *, struct cmd_find_state *, @@ -2653,7 +2654,7 @@ void printflike(3, 4) screen_write_puts(struct screen_write_ctx *, const struct grid_cell *, const char *, ...); void printflike(4, 5) screen_write_nputs(struct screen_write_ctx *, ssize_t, const struct grid_cell *, const char *, ...); -void screen_write_vnputs(struct screen_write_ctx *, ssize_t, +void printflike(4, 0) screen_write_vnputs(struct screen_write_ctx *, ssize_t, const struct grid_cell *, const char *, va_list); void screen_write_putc(struct screen_write_ctx *, const struct grid_cell *, u_char); @@ -2922,7 +2923,8 @@ extern const struct window_mode window_client_mode; extern const struct window_mode window_copy_mode; extern const struct window_mode window_view_mode; void printflike(2, 3) window_copy_add(struct window_pane *, const char *, ...); -void window_copy_vadd(struct window_pane *, const char *, va_list); +void printflike(2, 0) window_copy_vadd(struct window_pane *, const char *, + va_list); void window_copy_pageup(struct window_pane *, int); void window_copy_start_drag(struct client *, struct mouse_event *); char *window_copy_get_word(struct window_pane *, u_int, u_int); diff --git a/xmalloc.h b/xmalloc.h index 3fe4f1cc..b4dcb535 100644 --- a/xmalloc.h +++ b/xmalloc.h @@ -30,12 +30,14 @@ int xasprintf(char **, const char *, ...) __attribute__((__format__ (printf, 2, 3))) __attribute__((__nonnull__ (2))); int xvasprintf(char **, const char *, va_list) + __attribute__((__format__ (printf, 2, 0))) __attribute__((__nonnull__ (2))); int xsnprintf(char *, size_t, const char *, ...) __attribute__((__format__ (printf, 3, 4))) __attribute__((__nonnull__ (3))) __attribute__((__bounded__ (__string__, 1, 2))); int xvsnprintf(char *, size_t, const char *, va_list) + __attribute__((__format__ (printf, 3, 0))) __attribute__((__nonnull__ (3))) __attribute__((__bounded__ (__string__, 1, 2))); From c6d6af49039d7fc3ec14c2240153226709497313 Mon Sep 17 00:00:00 2001 From: nicm Date: Wed, 25 Aug 2021 07:37:20 +0000 Subject: [PATCH 3/3] setupterm needs char * not const char * on some platforms. --- tty-term.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tty-term.c b/tty-term.c index ae103fd7..b3d01850 100644 --- a/tty-term.c +++ b/tty-term.c @@ -661,7 +661,7 @@ tty_term_read_list(const char *name, int fd, char ***caps, u_int *ncaps, const char *s; char tmp[11]; - if (setupterm(name, fd, &error) != OK) { + if (setupterm((char *)name, fd, &error) != OK) { switch (error) { case 1: xasprintf(cause, "can't use hardcopy terminal: %s",