On Tue, Nov 15, 2011 at 10:59:47AM -0800, Junio C Hamano wrote: > Jeff King <peff@xxxxxxxx> writes: > > > Junio, this bug is in 1.7.8-rc*. Do you want the one-liner fix for the > > release, or the nicer fix? > > Let's just do "static" for now, if we know the array is large enough. OK, here it is. I think it's correct, but I couldn't reproduce the valgrind failure here. Thomas, can you double check that this also solves your problem? -Peff -- >8 -- Subject: [PATCH] upload-archive: don't return pointers to stack buffer The prepare_argv function uses an internal stack-allocated buffer to create the argv array that will be used to run git-archive. Prior to c09cd77e, this was OK, as the function passed the argv array to write_archive itself, and the stack buffer was valid during its use. Since c09cd77e, however, the function returns an argv array with pointers pointing into the stack buffer. The calling function then passes the result to start_command, which tries to execve using pointers to a now-invalid buffer. Fix it by making the buffer static, which is a quick and simple fix, and works because we only run this function once per process. Credit for finding the bug and most of the analysis goes to Thomas Rast. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/upload-archive.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/builtin/upload-archive.c b/builtin/upload-archive.c index c57e8bd..f47c0f0 100644 --- a/builtin/upload-archive.c +++ b/builtin/upload-archive.c @@ -22,7 +22,8 @@ static void prepare_argv(const char **sent_argv, const char **argv) { const char *arg_cmd = "argument "; - char *p, buf[4096]; + char *p; + static char buf[4096]; int sent_argc; int len; -- 1.7.7.3.8.g38efa -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html