From e9e8dd148b9454abb5a7704d6f6249f7aa7aeded Mon Sep 17 00:00:00 2001 From: herengui Date: Thu, 10 Mar 2022 18:14:43 +0800 Subject: [PATCH] Replace Curses mvprintw() with va_list-based equivalent Instead of allocating a buffer for the formatted string and printing it with mvprintw() -- which should have a "%s" format argument to guard against '%' characters in the formatted string, hat tip Andreas Tille --, use vw_printw() which takes a va_list so can do the formatting itself. Signed-off-by: herengui --- bam_tview_curses.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/bam_tview_curses.c b/bam_tview_curses.c index 11db0da..37fb033 100644 --- a/bam_tview_curses.c +++ b/bam_tview_curses.c @@ -78,15 +78,11 @@ static void curses_destroy(tview_t* base) { */ static void curses_mvprintw(struct AbstractTview* tv,int y ,int x,const char* fmt,...) { - unsigned int size=tv->mcol+2; - char* str=malloc(size); - if(str==0) exit(EXIT_FAILURE); va_list argptr; va_start(argptr, fmt); - vsnprintf(str,size, fmt, argptr); + if (wmove(stdscr, y, x) != ERR) + vw_printw(stdscr, fmt, argptr); va_end(argptr); - mvprintw(y,x,str); - free(str); } static void curses_mvaddch(struct AbstractTview* tv,int y,int x,int ch) { -- 2.20.1