Skip to content

Commit

Permalink
attr.c::path_matches(): special case paths that end with a slash
Browse files Browse the repository at this point in the history
The function is given a string that ends with a slash to signal that
the path is a directory to make sure that a pattern that ends with a
slash (i.e. MUSTBEDIR) can tell directories and non-directories
apart.  However, the pattern itself (pat->pattern and
pat->patternlen) that came from such a MUSTBEDIR pattern is
represented as a string that ends with a slash, but patternlen does
not count that trailing slash. A MUSTBEDIR pattern "element/" is
represented as a counted string <"element/", 7> and this must match
match pathname "element/".

Because match_basename() and match_pathname() want to see pathname
"element" to match against the pattern <"element/", 7>, reduce the
length of the path to exclude the trailing slash when calling
these functions.

Signed-off-by: Junio C Hamano <[email protected]>
Signed-off-by: Jeff King <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
gitster committed Mar 29, 2013
1 parent bd2f371 commit dc09e9e
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions attr.c
Original file line number Diff line number Diff line change
Expand Up @@ -661,18 +661,18 @@ static int path_matches(const char *pathname, int pathlen,
{
const char *pattern = pat->pattern;
int prefix = pat->nowildcardlen;
int isdir = (pathlen && pathname[pathlen - 1] == '/');

if ((pat->flags & EXC_FLAG_MUSTBEDIR) &&
((!pathlen) || (pathname[pathlen-1] != '/')))
if ((pat->flags & EXC_FLAG_MUSTBEDIR) && !isdir)
return 0;

if (pat->flags & EXC_FLAG_NODIR) {
return match_basename(pathname + basename_offset,
pathlen - basename_offset,
pathlen - basename_offset - isdir,
pattern, prefix,
pat->patternlen, pat->flags);
}
return match_pathname(pathname, pathlen,
return match_pathname(pathname, pathlen - isdir,
base, baselen,
pattern, prefix, pat->patternlen, pat->flags);
}
Expand Down

0 comments on commit dc09e9e

Please sign in to comment.