From: Duy Nguyen Date: Tue, 16 Feb 2016 01:17:22 GMT Subject: Re: [PATCH 1/4] dir.c: fix match_pathname() Message-ID: In-Reply-To: On Tue, Feb 16, 2016 at 6:29 AM, Junio C Hamano wrote: > Nguyễn Thái Ngọc Duy writes: > >> Given the pattern "1/2/3/4" and the path "1/2/3/4/f", the pattern >> prefix is "1/2/3/4". We will compare and remove the prefix from both >> pattern and path and come to this code >> >> /* >> * If the whole pattern did not have a wildcard, >> * then our prefix match is all we need; we >> * do not need to call fnmatch at all. >> */ >> if (!patternlen && !namelen) >> return 1; >> >> where patternlen is zero (full pattern consumed) and the remaining >> path in "name" is "/f". We fail to realize it's matched in this case >> and fall back to fnmatch(), which also fails to catch it. Fix it. > > OK. And by checking *name against '/', we won't mistakenly say that > "1/2/3/4f" matches the pattern. Nicely explained. > > Can a pattern end with a '/'? No. At this point, we must have stripped that trailing slash and turned it to flag EXC_FLAG_MUSTBEDIR. -- Duy