The logic was a little misinterpreted in 1.8 commit.
Reduce buffers size to what's necessary.
---
 usr.bin/mg/help.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/usr.bin/mg/help.c b/usr.bin/mg/help.c
index cd983a3df2c..ff9aeebd7ad 100644
--- a/usr.bin/mg/help.c
+++ b/usr.bin/mg/help.c
@@ -17,6 +17,8 @@
 #include "key.h"
 #include "macro.h"
 
+#define KEYNAMESZ      6 /* max is "C-SPC" */
+
 static int     showall(struct buffer *, KEYMAP *, char *);
 static int     findbind(KEYMAP *, PF, char *, size_t);
 
@@ -128,7 +130,7 @@ static int
 showall(struct buffer *bp, KEYMAP *map, char *prefix)
 {
        KEYMAP  *newmap;
-       char     buf[80], keybuf[16];
+       char     buf[MAXKEY*KEYNAMESZ+1], keybuf[KEYNAMESZ];
        PF       fun;
        int      c;
 
@@ -140,13 +142,13 @@ showall(struct buffer *bp, KEYMAP *map, char *prefix)
                fun = doscan(map, c, &newmap);
                if (fun == rescan || fun == selfinsert)
                        continue;
-               getkeyname(buf, sizeof(buf), c);
-               (void)snprintf(keybuf, sizeof(keybuf), "%s%s ", prefix, buf);
+               getkeyname(keybuf, sizeof(keybuf), c);
+               (void)snprintf(buf, sizeof(buf), "%s%s ", prefix, keybuf);
                if (fun == NULL) {
-                       if (showall(bp, newmap, keybuf) == FALSE)
+                       if (showall(bp, newmap, buf) == FALSE)
                                return (FALSE);
                } else {
-                       if (addlinef(bp, "%-16s%s", keybuf,
+                       if (addlinef(bp, "%-16s%s", buf,
                                    function_name(fun)) == FALSE)
                                return (FALSE);
                }
-- 
2.23.0

Reply via email to