Merge branch 'lf/setup-prefix-pathspec'

"git cmd -- ':(top'" was not diagnosed as an invalid syntax, and
instead the parser kept reading beyond the end of the string.

* lf/setup-prefix-pathspec:
  setup.c: check that the pathspec magic ends with ")"
  setup.c: stop prefix_pathspec() from looping past the end of string
This commit is contained in:
Junio C Hamano 2013-03-25 14:01:00 -07:00
commit 51ebd0fe9e

12
setup.c
View File

@ -207,10 +207,11 @@ static const char *prefix_pathspec(const char *prefix, int prefixlen, const char
*copyfrom && *copyfrom != ')'; *copyfrom && *copyfrom != ')';
copyfrom = nextat) { copyfrom = nextat) {
size_t len = strcspn(copyfrom, ",)"); size_t len = strcspn(copyfrom, ",)");
if (copyfrom[len] == ')') if (copyfrom[len] == ',')
nextat = copyfrom + len;
else
nextat = copyfrom + len + 1; nextat = copyfrom + len + 1;
else
/* handle ')' and '\0' */
nextat = copyfrom + len;
if (!len) if (!len)
continue; continue;
for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++) for (i = 0; i < ARRAY_SIZE(pathspec_magic); i++)
@ -223,8 +224,9 @@ static const char *prefix_pathspec(const char *prefix, int prefixlen, const char
die("Invalid pathspec magic '%.*s' in '%s'", die("Invalid pathspec magic '%.*s' in '%s'",
(int) len, copyfrom, elt); (int) len, copyfrom, elt);
} }
if (*copyfrom == ')') if (*copyfrom != ')')
copyfrom++; die("Missing ')' at the end of pathspec magic in '%s'", elt);
copyfrom++;
} else { } else {
/* shorthand */ /* shorthand */
for (copyfrom = elt + 1; for (copyfrom = elt + 1;