dir.c::match_pathname(): pay attention to the length of string parameters
commitab3aebc15c13d083013591777688cecbcb703fb2
authorJeff King <peff@peff.net>
Thu, 28 Mar 2013 21:48:21 +0000 (28 17:48 -0400)
committerJunio C Hamano <gitster@pobox.com>
Fri, 29 Mar 2013 04:48:18 +0000 (28 21:48 -0700)
treee3dff778e8b98dcc96649398713aac809bf04b0d
parent982ac87316a1cf5126888157bdcbfa32268ebe47
dir.c::match_pathname(): pay attention to the length of string parameters

This function takes two counted strings: a <pattern, patternlen> pair
and a <pathname, pathlen> pair. But we end up feeding the result to
fnmatch, which expects NUL-terminated strings.

We can fix this by calling the fnmatch_icase_mem function, which
handles re-allocating into a NUL-terminated string if necessary.

While we're at it, we can avoid even calling fnmatch in some cases. In
addition to patternlen, we get "prefix", the size of the pattern that
contains no wildcard characters. We do a straight match of the prefix
part first, and then use fnmatch to cover the rest. But if there are
no wildcards in the pattern at all, we do not even need to call
fnmatch; we would simply be comparing two empty strings.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c