Source: nn Version: 6.7.3-14 Severity: normal Tags: patch Dear Maintainer,
>From 2ae6e446a99aaf29d50923c241da1ed2a7dd99eb Mon Sep 17 00:00:00 2001 >From: Bjarni Ingi Gislason <bjarn...@rhi.hi.is> >Date: Sun, 28 Feb 2021 01:44:08 +0000 >Subject: [PATCH] menu.c: use "snprintf()" instead of "sprintf()" Add the size of arrays to the arguments of some functions. Define named constants for the length of some arrays. Use "snprintf()" instead of "sprintf()". Signed-off-by: Bjarni Ingi Gislason <bjarn...@rhi.hi.is> --- menu.c | 53 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/menu.c b/menu.c index c33a156..22a4b19 100644 --- a/menu.c +++ b/menu.c @@ -37,7 +37,8 @@ static article_number next_root_article(register article_number root); static void set_root_if_closed(void); static article_number thread_counters(article_number art); static void cursor_at_id(void); -static attr_type closed_attr(register struct menu_info * mi, char *cbuf); +static attr_type closed_attr(register struct menu_info * mi, char *cbuf, + size_t ncbuf ); static void mark(void); static void toggle(void); static int do_auto_kill(void); @@ -92,8 +93,9 @@ int select_on_sender = 0; /* find command selects on sender */ int auto_select_subject = 0; /* auto select articles with * same subj. */ int auto_read_limit = 0; /* ignore auto_read_mode if less - * articles */ + * articles */ +extern const size_t NDELAYED_MSG; extern char delayed_msg[]; /* give to msg() after redraw */ int flush_typeahead = 0; @@ -273,9 +275,11 @@ cursor_at_id(void) } static attr_type -closed_attr(register struct menu_info * mi, char *cbuf) +closed_attr(register struct menu_info * mi, char *cbuf, size_t ncbuf ) { - char lft[10], sel[10], unr[10]; + const size_t NLFT = 10, NSEL = 10, NUNR = 10; + char lft[NLFT], sel[NSEL], unr[NUNR]; + attr_type cattr; if (mi->mi_total == mi->mi_left) @@ -293,12 +297,12 @@ closed_attr(register struct menu_info * mi, char *cbuf) lft[0] = sel[0] = unr[0] = NUL; if (mi->mi_left && mi->mi_left < mi->mi_unread) - sprintf(lft, "%d,", mi->mi_left); + snprintf(lft, NLFT, "%d,", mi->mi_left); if (mi->mi_selected && mi->mi_selected < mi->mi_unread) - sprintf(sel, "%d/", mi->mi_selected); + snprintf(sel, NSEL, "%d/", mi->mi_selected); if (mi->mi_unread && mi->mi_unread < mi->mi_total) - sprintf(unr, "%d:", mi->mi_unread); - sprintf(cbuf, "%s%s%s%d", lft, sel, unr, mi->mi_total); + snprintf(unr, NUNR, "%d:", mi->mi_unread); + snprintf(cbuf, ncbuf, "%s%s%s%d", lft, sel, unr, mi->mi_total); return cattr; } @@ -312,7 +316,8 @@ mark(void) register struct menu_info *mi; int lno, lnum, lsubj, lname; int pad; - char cbuf[80]; +#define NCBUF 80 + char cbuf[NCBUF]; attr_type cattr = 0; ah = articles[firsta + cura]; @@ -325,7 +330,7 @@ mark(void) lno = firstl + ah->menu_line; gotoxy(0, lno); tputc(ident[mi->mi_art_id]); - cattr = closed_attr(mi, cbuf); + cattr = closed_attr(mi, cbuf, NCBUF); goto print_line; } if (cura < 0 || cura > numa) @@ -335,7 +340,8 @@ mark(void) if (ah->flag & A_CLOSED) { struct menu_info old; - char oldctr[80]; +#define NOLDCTR 80 + char oldctr[NOLDCTR]; mi = &menu_info[ah->menu_line]; old = *mi; @@ -345,12 +351,11 @@ mark(void) old.mi_left == mi->mi_left && old.mi_unread == mi->mi_unread) return; - - cattr = closed_attr(mi, cbuf); + cattr = closed_attr(mi, cbuf, NCBUF); if (!slow_mode) goto print_line; - closed_attr(&old, oldctr); + closed_attr(&old, oldctr, NOLDCTR); if (strcmp(cbuf, oldctr)) goto print_line; last_attr = cattr; @@ -811,7 +816,7 @@ show_articles(void) } if (again > 1) - sprintf(delayed_msg, "Showing %ld articles again", again); + snprintf(delayed_msg, NDELAYED_MSG, "Showing %d articles again", again); } while (again); return MC_READGROUP; @@ -868,6 +873,7 @@ loop: cur_key = c; map = key_map[c]; } + if (s_hangup) map = K_QUIT; @@ -915,7 +921,8 @@ char * pct(long start, long end, long first, long last) { long n = end - start; - static char buf[16]; +#define NBUF 16 + static char buf[NBUF]; char *fmt; if (first <= start || n <= 0) { @@ -929,7 +936,7 @@ pct(long start, long end, long first, long last) fmt = "%d%%"; } - sprintf(buf, fmt, ((last - start) * 100) / n); + snprintf(buf, NBUF, fmt, ((last - start) * 100) / n); return buf; } @@ -1103,7 +1110,8 @@ menu(fct_type print_header) article_number o_firsta, temp1 = 0, temp2; int o_mode; /* for recursive calls */ static int menu_level = 0; - char purpose[80], pr_fmt[60]; +#define NPR_FMT 60 + char purpose[80], pr_fmt[NPR_FMT]; article_number elim_list[3]; int entry_check; int auto_read; @@ -1136,7 +1144,7 @@ menu(fct_type print_header) auto_read = 0; } - sprintf(pr_fmt, + snprintf(pr_fmt, NPR_FMT, menu_level == 1 ? "\1\2-- SELECT %s-----%%s-----\1" : "\1\2-- SELECT %s-----%%s-----<%s%d>--\1", @@ -1218,7 +1226,7 @@ empty_menu_hack: /* do: "s_keyboard=1; goto empty_menu_hack;" */ if (purpose[0]) strcpy(delayed_msg, purpose); else - sprintf(delayed_msg, "Entering %s, %ld articles", + snprintf(delayed_msg, NDELAYED_MSG, "Entering %s, %ld articles", current_group->group_name, (long) n_articles); goto do_auto_read; } @@ -2454,7 +2462,8 @@ int alt_command(void) { int ok_val, macro_cmd; - char *cmd, brkchars[10]; +#define NBRKCHARS 10 + char *cmd, brkchars[NBRKCHARS]; if (get_from_macro) ok_val = AC_UNCHANGED; @@ -2465,7 +2474,7 @@ alt_command(void) again: - sprintf(brkchars, "?%c ", erase_key); + snprintf(brkchars, NBRKCHARS, "?%c ", erase_key); cmd = get_s(NONE, NONE, brkchars, alt_completion); if (cmd == NULL || -- 2.30.1 -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (500, 'testing'), (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 5.10.9-1 (SMP w/2 CPU threads) Locale: LANG=is_IS.iso88591, LC_CTYPE=is_IS.iso88591 (charmap=ISO-8859-1), LANGUAGE not set Shell: /bin/sh linked to /bin/dash Init: sysvinit (via /sbin/init) -- debconf information excluded -- Bjarni I. Gislason