diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c index 6f666037106..f01155a1f59 100644 --- a/dlls/wbemprox/query.c +++ b/dlls/wbemprox/query.c @@ -63,10 +63,10 @@ static BOOL eval_like( const WCHAR *lstr, const WCHAR *rstr ) { while (*q == '%') q++; if (!*q) return TRUE; - while (*p && toupperW( p[1] ) != toupperW( q[1] )) p++; - if (!*p) return TRUE; + while (*p && *q && toupperW( *p ) == toupperW( *q )) { p++; q++; }; + if (!*p && !*q) return TRUE; } - if (toupperW( *p++ ) != toupperW( *q++ )) return FALSE; + if (*q != '%' && toupperW( *p++ ) != toupperW( *q++ )) return FALSE; } return TRUE; } diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c index b46ff521cb6..09c8734fb7f 100644 --- a/dlls/wbemprox/tests/query.c +++ b/dlls/wbemprox/tests/query.c @@ -98,7 +98,11 @@ static void test_select( IWbemServices *services ) '\"','\\','\\','\\','\\','.','\\','\\','P','H','Y','S','I','C','A','L','D','R','I','V','E','0','\"',0}; static const WCHAR query9[] = {'S','E','L','E','C','T','\n','a','\r','F','R','O','M','\t','b',0}; - static const WCHAR *test[] = { query1, query2, query3, query4, query5, query6, query7, query8, query9 }; + static const WCHAR query10[] = + {'S','E','L','E','C','T',' ','*',' ','F','R','O','M',' ','W','i','n','3','2','_', + 'P','r','o','c','e','s','s',' ','W','H','E','R','E',' ','C','a','p','t','i','o','n',' ', + 'L','I','K','E',' ','"','%','f','i','r','e','f','o','x','.','e','x','e','"',0}; + static const WCHAR *test[] = { query1, query2, query3, query4, query5, query6, query7, query8, query9, query10 }; HRESULT hr; IEnumWbemClassObject *result; BSTR wql = SysAllocString( wqlW );