]> git.ipfire.org Git - thirdparty/libbsd.git/commitdiff
setmode: Dot not use saveset after free
authorGuillem Jover <guillem@hadrons.org>
Tue, 23 Aug 2022 21:49:34 +0000 (23:49 +0200)
committerGuillem Jover <guillem@hadrons.org>
Tue, 23 Aug 2022 21:51:05 +0000 (23:51 +0200)
While we are only doing a pointer difference and not dereferencing it,
it's easier and more correct to do the pointer difference before passing
it to reallocarray().

Warned-by: gcc
src/setmode.c

index f65875e95f308dead4bd4e76107b595e3caa6697..c92cdc57ab7dc8c8ca30a8cfc2171099b4701d8b 100644 (file)
@@ -36,6 +36,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 
+#include <stddef.h>
 #include <ctype.h>
 #include <errno.h>
 #include <signal.h>
@@ -144,12 +145,13 @@ common:                   if (set->cmd2 & CMD2_CLR) {
 
 #define        ADDCMD(a, b, c, d) do {                                         \
        if (set >= endset) {                                            \
+               ptrdiff_t setdiff = set - saveset;                      \
                BITCMD *newset;                                         \
                setlen += SET_LEN_INCR;                                 \
                newset = reallocarray(saveset, setlen, sizeof(BITCMD)); \
                if (newset == NULL)                                     \
                        goto out;                                       \
-               set = newset + (set - saveset);                         \
+               set = newset + setdiff;                                 \
                saveset = newset;                                       \
                endset = newset + (setlen - 2);                         \
        }                                                               \