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> Tested-by: İsmail Dönmez <ismail@pardus.org.tr> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
98fa5b6851
commit
a8db80c224
|
@ -90,7 +90,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||||
strbuf_init(&directory, 0);
|
strbuf_init(&directory, 0);
|
||||||
|
|
||||||
if (pathspec)
|
if (pathspec)
|
||||||
seen = xmalloc(argc);
|
seen = xmalloc(argc > 0 ? argc : 1);
|
||||||
|
|
||||||
for (i = 0; i < dir.nr; i++) {
|
for (i = 0; i < dir.nr; i++) {
|
||||||
struct dir_entry *ent = dir.entries[i];
|
struct dir_entry *ent = dir.entries[i];
|
||||||
|
@ -125,7 +125,7 @@ int cmd_clean(int argc, const char **argv, const char *prefix)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pathspec) {
|
if (pathspec) {
|
||||||
memset(seen, 0, argc);
|
memset(seen, 0, argc > 0 ? argc : 1);
|
||||||
matches = match_pathspec(pathspec, ent->name, ent->len,
|
matches = match_pathspec(pathspec, ent->name, ent->len,
|
||||||
baselen, seen);
|
baselen, seen);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue