utrace: Fix off-by-one errors
[project/procd.git] / trace / trace.c
index 662010e..65fe067 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,11 +185,11 @@ int main(int argc, char **argv, char **envp)
                while (envp[envc++])
                        ;
 
-               _envp = calloc(envc, sizeof(char *));
-               memcpy(&_envp[1], _envp, envc * sizeof(char *));
-               *envp = preload;
+               _envp = calloc(envc + 1, sizeof(char *));
+               memcpy(&_envp[1], envp, envc * sizeof(char *));
+               *_envp = preload;
 
-               ret = execve(_argv[0], _argv, envp);
+               ret = execve(_argv[0], _argv, _envp);
                ERROR("failed to exec %s: %s\n", _argv[0], strerror(errno));
 
                free(_argv);