From 017f3a1f9e128282ecf971d81bd915d0db7f8a31 Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Tue, 12 Sep 2017 13:12:34 +0200 Subject: [PATCH 1/1] 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 --- trace/trace.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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; -- 2.30.2