From 86f61a2fb6743212e7716750a7ee0efa3e57e0b2 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Fri, 14 Oct 2005 12:19:55 +0000 Subject: [PATCH] STABLE14-windows-pattern-matching-20051014 FIXES 4623 Pattern matching was broken. '?' should match zero characters if it appears before a '.' or at the end of the file name. (cherry picked from commit 41fe908bead6b30e41fd9e4f5084cd5e1dc3ca4a) --- src/WINNT/afsd/smb3.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 50e7b85af..3e91c6fdf 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -3557,9 +3557,10 @@ szWildCardMatchFileName(PSZ pattern, PSZ name, int casefold) while (*name) { switch (*pattern) { case '?': - if (*name == '.') - return FALSE; - ++pattern, ++name; + ++pattern; + if (*name == '.') + continue; + ++name; break; case '*': ++pattern; @@ -3581,10 +3582,12 @@ szWildCardMatchFileName(PSZ pattern, PSZ name, int casefold) } /* endswitch */ } /* endwhile */ - if (*pattern == '\0' || *pattern == '*' && *(pattern+1) == '\0') - return TRUE; - else - return FALSE; + /* if all we have left are wildcards, then we match */ + for (;*pattern; pattern++) { + if (*pattern != '*' && *pattern != '?') + return FALSE; + } + return TRUE; } /* do a case-folding search of the star name mask with the name in namep. -- 2.39.5