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

Reply via email to