From 7bfa058a0b89e6a4f24dd43db9a0ea5c1a304b71 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Tue, 25 Oct 2022 11:21:28 +0200 Subject: [PATCH] wbemprox: WQL string comparisons are case insensitive. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53832 --- dlls/wbemprox/query.c | 12 ++++++------ dlls/wbemprox/tests/query.c | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/dlls/wbemprox/query.c b/dlls/wbemprox/query.c index 8233d35878d..1b79523d66f 100644 --- a/dlls/wbemprox/query.c +++ b/dlls/wbemprox/query.c @@ -118,22 +118,22 @@ static HRESULT eval_strcmp( UINT op, const WCHAR *lstr, const WCHAR *rstr, LONGL switch (op) { case OP_EQ: - *val = !wcscmp( lstr, rstr ); + *val = !wcsicmp( lstr, rstr ); break; case OP_GT: - *val = wcscmp( lstr, rstr ) > 0; + *val = wcsicmp( lstr, rstr ) > 0; break; case OP_LT: - *val = wcscmp( lstr, rstr ) < 0; + *val = wcsicmp( lstr, rstr ) < 0; break; case OP_LE: - *val = wcscmp( lstr, rstr ) <= 0; + *val = wcsicmp( lstr, rstr ) <= 0; break; case OP_GE: - *val = wcscmp( lstr, rstr ) >= 0; + *val = wcsicmp( lstr, rstr ) >= 0; break; case OP_NE: - *val = wcscmp( lstr, rstr ); + *val = wcsicmp( lstr, rstr ); break; case OP_LIKE: *val = eval_like( lstr, rstr ); diff --git a/dlls/wbemprox/tests/query.c b/dlls/wbemprox/tests/query.c index 12bc42d249c..e86f7fd5b62 100644 --- a/dlls/wbemprox/tests/query.c +++ b/dlls/wbemprox/tests/query.c @@ -2141,6 +2141,28 @@ static void test_Win32_LogicalDisk( IWbemServices *services ) IWbemClassObject_Release( obj ); } + IEnumWbemClassObject_Release( result ); + SysFreeString( query ); + + query = SysAllocString( L"SELECT * FROM Win32_LogicalDisk WHERE DeviceID > 'b:' AND DeviceID < 'd:'" ); + hr = IWbemServices_ExecQuery( services, wql, query, 0, NULL, &result ); + ok( hr == S_OK, "got %#lx\n", hr ); + count = 0; + hr = IEnumWbemClassObject_Next( result, 10000, 1, &obj, &count ); + ok( hr == S_OK, "got %#lx\n", hr ); + ok( count == 1, "got %lu\n", count ); + IWbemClassObject_Release( obj ); + SysFreeString( query ); + + query = SysAllocString( L"SELECT * FROM Win32_LogicalDisk WHERE DeviceID = 'C:'" ); + hr = IWbemServices_ExecQuery( services, wql, query, 0, NULL, &result ); + ok( hr == S_OK, "got %#lx\n", hr ); + count = 0; + hr = IEnumWbemClassObject_Next( result, 10000, 1, &obj, &count ); + ok( hr == S_OK, "got %#lx\n", hr ); + ok( count == 1, "got %lu\n", count ); + IWbemClassObject_Release( obj ); + SysFreeString( query ); IEnumWbemClassObject_Release( result ); SysFreeString( query ); SysFreeString( wql );