From: Michal Sojka Date: Tue, 12 Sep 2017 11:12:34 +0000 (+0200) Subject: utrace: Fix off-by-one errors X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=017f3a1f9e128282ecf971d81bd915d0db7f8a31;p=oweals%2Fprocd.git utrace: Fix off-by-one errors This fixes two errors: 1) memcpy() copies envc elements starting from index 1, so the number of elements in target array should be envc + 1. But only envc was allocated. 2) If original environment envp is empty, i.e. it contains only a NULL element, the while loop misses it. Signed-off-by: Michal Sojka --- diff --git a/trace/trace.c b/trace/trace.c index 04bf7a5..65fe067 100644 --- a/trace/trace.c +++ b/trace/trace.c @@ -177,7 +177,7 @@ int main(int argc, char **argv, char **envp) char **_argv = calloc(argc + 1, sizeof(char *)); char **_envp; char *preload = "LD_PRELOAD=/lib/libpreload-trace.so"; - int envc = 1; + int envc = 0; int ret; memcpy(_argv, argv, argc * sizeof(char *)); @@ -185,7 +185,7 @@ int main(int argc, char **argv, char **envp) while (envp[envc++]) ; - _envp = calloc(envc, sizeof(char *)); + _envp = calloc(envc + 1, sizeof(char *)); memcpy(&_envp[1], envp, envc * sizeof(char *)); *_envp = preload;