Re: [ANNOUNCE] GIT 1.5.4-rc3
- From
Jeff King <peff@peff.net>
- Date
- Jan 12, 2008, 09:04 UTC
- Message-ID
- <20080112090432.GA6134@coredump.intra.peff.net>
- In-Reply-To
- <200801120947.48602.ismail@pardus.org.tr>
On Sat, Jan 12, 2008 at 09:47:48AM +0200, Ismail Dönmez wrote:
Show 6 quoted lines
> So looks like tests no longer work as root, so I run make test as normal user > and I now see t7300-clean.sh fail, this time a real failure: > > Removing part3.c > ./test-lib.sh: line 193: 19413 Aborted git-clean > * FAIL 5: git-clean with prefix
I couldn't reproduce this just running the test, but running it under valgrind showed a memory access error. Fix is below.
Junio, can you please sanity check this fix (it stops the valgrind error, but I want to make sure my assumptions about match_pathspec are right).
-- >8 -- git-clean: fix off-by-one memory access when given no arguments
The "seen" variable is used by match_pathspec, and must have as many elements as there are in the given pathspec. We create the pathspec either from the command line arguments _or_ from just the current prefix.
Thus allocating "seen" based upon just argc is wrong, since if argc == 0, then we still have one pathspec, the prefix, but we don't allocate any space in "seen".
Signed-off-by: Jeff King <peff@peff.net> --- It might be more readable to actually set a variable pathspec_size and use that.
builtin-clean.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/builtin-clean.c b/builtin-clean.c index 6cad8ea..eb853a3 100644 --- a/builtin-clean.c +++ b/builtin-clean.c @@ -90,7 +90,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix) strbuf_init(&directory, 0); if (pathspec) - seen = xmalloc(argc); + seen = xmalloc(argc > 0 ? argc : 1); for (i = 0; i < dir.nr; i++) { struct dir_entry *ent = dir.entries[i]; @@ -125,7 +125,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix) continue; if (pathspec) { - memset(seen, 0, argc); + memset(seen, 0, argc > 0 ? argc : 1); matches = match_pathspec(pathspec, ent->name, ent->len, baselen, seen); } else {
-- 1.5.4.rc3-dirty