tab-complete: figure out the size before copying
authorNRK <nrk@disroot.org>
Thu, 1 Sep 2022 17:51:43 +0000 (23:51 +0600)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Fri, 2 Sep 2022 11:00:48 +0000 (13:00 +0200)
we already need to know the string length since `cursor` needs to be
adjusted.

so just calculate the length beforehand and use `memcpy` to copy exactly
as much as needed (as opposed to `strncpy` which always writes `n`
bytes).

dmenu.c

diff --git a/dmenu.c b/dmenu.c
index 969f6d80622579da4b69dd65893aba7869b3d2b1..6b285df1cc5e66febdabc4f4997db298737ce419 100644 (file)
--- a/dmenu.c
+++ b/dmenu.c
@@ -517,9 +517,9 @@ insert:
        case XK_Tab:
                if (!sel)
                        return;
-               strncpy(text, sel->text, sizeof text - 1);
+               cursor = strnlen(sel->text, sizeof text - 1);
+               memcpy(text, sel->text, cursor);
                text[sizeof text - 1] = '\0';
-               cursor = strlen(text);
                match();
                break;
        }