859c301 (refs: split log_ref_write logic into log_ref_setup, 2010-05-21) refactors the stack allocation of the log_file array into the new log_ref_setup() function, but passes it back to the caller. Since the original intent seems to have been to split the work between log_ref_setup and log_ref_write, make it the caller's responsibility to allocate the buffer. Signed-off-by: Thomas Rast <trast@xxxxxxxxxxxxxxx> Reported-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> --- Causes t5516 to fail, but only if I run it under valgrind. (Ævar managed to trigger it in other ways apparently.) refs.c | 10 ++++------ 1 files changed, 4 insertions(+), 6 deletions(-) diff --git a/refs.c b/refs.c index 3436649..2a3eeec 100644 --- a/refs.c +++ b/refs.c @@ -1262,13 +1262,11 @@ static int copy_msg(char *buf, const char *msg) return cp - buf; } -int log_ref_setup(const char *ref_name, char **log_file) +int log_ref_setup(const char *ref_name, char *logfile, int bufsize) { int logfd, oflags = O_APPEND | O_WRONLY; - char logfile[PATH_MAX]; - git_snpath(logfile, sizeof(logfile), "logs/%s", ref_name); - *log_file = logfile; + git_snpath(logfile, bufsize, "logs/%s", ref_name); if (log_all_ref_updates && (!prefixcmp(ref_name, "refs/heads/") || !prefixcmp(ref_name, "refs/remotes/") || @@ -1309,14 +1307,14 @@ static int log_ref_write(const char *ref_name, const unsigned char *old_sha1, int logfd, result, written, oflags = O_APPEND | O_WRONLY; unsigned maxlen, len; int msglen; - char *log_file; + char log_file[PATH_MAX]; char *logrec; const char *committer; if (log_all_ref_updates < 0) log_all_ref_updates = !is_bare_repository(); - result = log_ref_setup(ref_name, &log_file); + result = log_ref_setup(ref_name, log_file, sizeof(log_file)); if (result) return result; -- 1.7.1.553.ga798e -- 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