From: Nguyễn Thái Ngọc Duy Date: Mon, 15 Feb 2016 09:03:36 GMT Subject: [PATCH 1/4] dir.c: fix match_pathname() Message-ID: <1455527019-7787-2-git-send-email-pclouds@gmail.com> In-Reply-To: <1455527019-7787-1-git-send-email-pclouds@gmail.com> 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. Signed-off-by: Nguyễn Thái Ngọc Duy --- dir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dir.c b/dir.c index f0b6d0a..bcaafac 100644 --- a/dir.c +++ b/dir.c @@ -878,7 +878,7 @@ int match_pathname(const char *pathname, int pathlen, * then our prefix match is all we need; we * do not need to call fnmatch at all. */ - if (!patternlen && !namelen) + if (!patternlen && (!namelen || *name == '/')) return 1; } -- 2.7.0.377.g4cd97dd