about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
authorSteffen Jaeckel <jaeckel-floss@eyet-services.de>2023-05-11 11:20:52 +0200
committerMichael Vetter <jubalh@iodoru.org>2023-05-12 08:39:23 +0200
commit197b839944c139672e2aa1e9e83632630138f6a7 (patch)
tree63e878abbe3547fda9d14082be71d36c864862ea /src/ui
parent12d76e4a214c392e6e3daa5fd9bcf816addf8746 (diff)
downloadprofani-tty-197b839944c139672e2aa1e9e83632630138f6a7.tar.gz
Remove VLA & calm Valgrind
`MB_CUR_MAX` looks like a macro, but it's a function call and therefore
creates a VLA. We don't want that.

Also this array being uninitialized created the following Valgrind error

```
==503529== Conditional jump or move depends on uninitialised value(s)
==503529==    at 0x619F15E: waddnstr (lib_addstr.c:67)
==503529==    by 0x1929B7: _inp_write (inputwin.c:353)
==503529==    by 0x1937D5: _inp_redisplay (inputwin.c:619)
==503529==    by 0x61511B1: rl_forced_update_display (display.c:2693)
==503529==    by 0x193F9D: _inp_rl_send_to_editor (inputwin.c:957)
==503529==    by 0x614642F: _rl_dispatch_subseq (readline.c:916)
==503529==    by 0x6146C85: _rl_dispatch_callback (readline.c:823)
==503529==    by 0x616739F: rl_callback_read_char (callback.c:241)
==503529==    by 0x1923DB: inp_readline (inputwin.c:188)
==503529==    by 0x149860: prof_run (profanity.c:117)
==503529==    by 0x2283E8: main (main.c:186)
==503529==  Uninitialised value was created by a stack allocation
==503529==    at 0x1928B1: _inp_write (inputwin.c:334)
```

Signed-off-by: Steffen Jaeckel <jaeckel-floss@eyet-services.de>
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/inputwin.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index bc689d5f..9b652f1c 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -36,6 +36,7 @@
 #define _XOPEN_SOURCE_EXTENDED
 #include "config.h"
 
+#include <assert.h>
 #include <stdio.h>
 #include <sys/select.h>
 #include <stdlib.h>
@@ -140,6 +141,11 @@ static int _inp_rl_send_to_editor(int count, int key);
 void
 create_input_window(void)
 {
+    /* MB_CUR_MAX is evaluated at runtime depending on the current
+     * locale, therefore we check that our own version is big enough
+     * and bail out if it isn't.
+     */
+    assert(MB_CUR_MAX <= PROF_MB_CUR_MAX);
 #ifdef NCURSES_REENTRANT
     set_escdelay(25);
 #else
@@ -331,7 +337,7 @@ _inp_write(char* line, int offset)
 
     for (size_t i = 0; line[i] != '\0'; i++) {
         char* c = &line[i];
-        char retc[MB_CUR_MAX];
+        char retc[PROF_MB_CUR_MAX] = { 0 };
 
         size_t ch_len = mbrlen(c, MB_CUR_MAX, NULL);
         if ((ch_len == (size_t)-2) || (ch_len == (size_t)-1)) {