Subject: Re: [PATCH 4/6] dir.c::match_pathname(): pay attention to the length of string parameters

From: Torsten Bögershausen <[email-masked]>
Date: Fri, 29 Mar 2013 12:32:53 +0100

On 29.03.13 11:03, Duy Nguyen wrote:
> On Fri, Mar 29, 2013 at 3:45 PM, Duy Nguyen <[email-masked]> wrote:
>> On Fri, Mar 29, 2013 at 4:48 AM, Jeff King <[email-masked]> wrote:
>>> -       return fnmatch_icase(pattern, name, FNM_PATHNAME) == 0;
>>> +       return fnmatch_icase_mem(pattern, patternlen,
>>> +                                name, namelen,
>>> +                                FNM_PATHNAME) == 0;
>>>  }
>>
>> I think you (or Junio) should rebase this on maint. Since c41244e
>> (included in maint), this call is turned to wildmatch(WM_PATHNAME) and
>> WM_PATHNAME is _not_ the same as FNM_PATHNAME for patterns like
>> "foo/**/bar". A diff between next and pu shows me that WM_PATHNAME is
>> incorrectly converted to FNM_PATHNAME. I hope that is the cause of all
>> breakages Junio found out on pu.
> 
> Just tested. t0003 and t3001 on 'pu' work for me because I have
> USE_WILDMATCH on (which turns FNM_PATHNAME to WM_PATHNAME). Both break
> without USE_WILDMATCH.
> 
Hm, tested what?

diff --git a/dir.c b/dir.c
index 73a08af..0b63167 100644
--- a/dir.c
+++ b/dir.c
@@ -564,7 +564,7 @@ int match_pathname(const char *pathname, int pathlen,
 
        return fnmatch_icase_mem(pattern, patternlen,
                                 name, namelen,
-                                FNM_PATHNAME) == 0;
+                                WM_PATHNAME) == 0;
 }
 
Gives only one breakage, so we are coming closer.

*** t3001-ls-files-others-exclude.sh ***
[snip]
not ok 17 - ls-files with "**" patterns