From 8a9c7d2efcd736b0300065009b043813a7a4ac25 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Sun, 10 May 2020 23:59:42 +0200 Subject: [PATCH] argtable3: fix buffer overrun This bug was suddently triggered by Appveyor compilation and seems to make sense. [-] CC argtable3.c inlined from 'arg_cat_option' at argtable3.c:4208:13, inlined from 'arg_print_syntax' at argtable3.c:4392:9: argtable3.c:4149:11: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=] 4149 | *dest = 0; | ~~~~~~^~~ argtable3.c: In function 'arg_print_syntax': argtable3.c:4381:14: note: at offset 200 to object 'syntax' with size 200 declared here 4381 | char syntax[200] = ""; | ^~~~~~ --- client/deps/cliparser/argtable3.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/deps/cliparser/argtable3.c b/client/deps/cliparser/argtable3.c index f66c22d6d..f64688b2a 100644 --- a/client/deps/cliparser/argtable3.c +++ b/client/deps/cliparser/argtable3.c @@ -4135,7 +4135,8 @@ int arg_parse(int argc, char * *argv, void * *argtable) { */ static void arg_cat(char **pdest, const char *src, size_t *pndest) { char *dest = *pdest; - char *end = dest + *pndest; + // PM3 fix: leave room for null terminate char + char *end = dest + *pndest - 1; /*locate null terminator of dest string */ while (dest < end && *dest != 0)