utrace: Fix off-by-one errors
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 12 Sep 2017 11:12:34 +0000 (13:12 +0200)
committerJohn Crispin <john@phrozen.org>
Thu, 28 Sep 2017 06:26:56 +0000 (08:26 +0200)
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 <sojkam1@fel.cvut.cz>
trace/trace.c

index 04bf7a55c8a8605cb955e2dfd93cc3d33e5849bd..65fe06727e34221f83632edac7714fdac16f088d 100644 (file)
@@ -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;