[4/4] fusion: Make sure the assembly exists in IAssemblyCache::QueryAssemblyInfo.
Hans Leidekker
hans at codeweavers.com
Wed May 16 03:08:02 CDT 2012
Should fix http://bugs.winehq.org/show_bug.cgi?id=26426
---
dlls/fusion/asmcache.c | 13 +++++++++----
dlls/fusion/tests/asmcache.c | 41 +++++++++++++++++++++++++++++------------
2 files changed, 38 insertions(+), 16 deletions(-)
diff --git a/dlls/fusion/asmcache.c b/dlls/fusion/asmcache.c
index e6a2a65..c6f7ca9 100644
--- a/dlls/fusion/asmcache.c
+++ b/dlls/fusion/asmcache.c
@@ -308,11 +308,16 @@ static HRESULT WINAPI IAssemblyCacheImpl_QueryAssemblyInfo(IAssemblyCache *iface
if (FAILED(hr))
goto done;
- hr = IAssemblyEnum_GetNextAssembly(asmenum, NULL, &next, 0);
- if (hr == S_FALSE)
+ for (;;)
{
- hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
- goto done;
+ hr = IAssemblyEnum_GetNextAssembly(asmenum, NULL, &next, 0);
+ if (hr != S_OK)
+ {
+ hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
+ goto done;
+ }
+ hr = IAssemblyName_IsEqual(asmname, next, ASM_CMPF_IL_ALL);
+ if (hr == S_OK) break;
}
if (!pAsmInfo)
diff --git a/dlls/fusion/tests/asmcache.c b/dlls/fusion/tests/asmcache.c
index 141e442..890bd9c 100644
--- a/dlls/fusion/tests/asmcache.c
+++ b/dlls/fusion/tests/asmcache.c
@@ -1011,6 +1011,11 @@ static void test_QueryAssemblyInfo(void)
'_','M','S','I','L','\\','w','i','n','e','\\',
'1','.','0','.','0','.','0','_','_','2','d','0','3','6','1','7','b',
'1','c','3','1','e','2','f','5','\\',0};
+ static const WCHAR wine2[] = {
+ 'w','i','n','e',',','v','e','r','s','i','o','n','=','1','.','0','.','0','.','1',',',
+ 'p','u','b','l','i','c','K','e','y','T','o','k','e','n','=',
+ '2','d','0','3','6','1','7','b','1','c','3','1','e','2','f','5',',',
+ 'c','u','l','t','u','r','e','=','n','e','u','t','r','a','l',0};
size = MAX_PATH;
hr = pGetCachePath(ASM_CACHE_GAC, asmpath, &size);
@@ -1363,6 +1368,24 @@ static void test_QueryAssemblyInfo(void)
"Assembly path was changed\n");
ok(info.cchBuf == MAX_PATH, "Expected MAX_PATH, got %d\n", info.cchBuf);
+ /* display name is "wine,version=1.0.0.1,publicKeyToken=2d03617b1c31e2f5,culture=neutral" */
+ INIT_ASM_INFO();
+ lstrcpyW(name, wine2);
+ hr = IAssemblyCache_QueryAssemblyInfo(cache, QUERYASMINFO_FLAG_GETSIZE,
+ name, &info);
+ ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
+ "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got %08x\n", hr);
+ ok(info.cbAssemblyInfo == sizeof(ASSEMBLY_INFO),
+ "Expected sizeof(ASSEMBLY_INFO), got %d\n", info.cbAssemblyInfo);
+ ok(info.dwAssemblyFlags == 0, "Expected 0, got %08x\n", info.dwAssemblyFlags);
+ ok(info.uliAssemblySizeInKB.u.HighPart == 0,
+ "Expected 0, got %d\n", info.uliAssemblySizeInKB.u.HighPart);
+ ok(info.uliAssemblySizeInKB.u.LowPart == 0,
+ "Expected 0, got %d\n", info.uliAssemblySizeInKB.u.LowPart);
+ ok(!lstrcmpW(info.pszCurrentAssemblyPathBuf, empty),
+ "Assembly path was changed\n");
+ ok(info.cchBuf == MAX_PATH, "Expected MAX_PATH, got %d\n", info.cchBuf);
+
/* display name is "wine, Culture=neutral" */
INIT_ASM_INFO();
lstrcpyW(name, wine);
@@ -1394,24 +1417,18 @@ static void test_QueryAssemblyInfo(void)
lstrcatW(name, badculture);
hr = IAssemblyCache_QueryAssemblyInfo(cache, QUERYASMINFO_FLAG_GETSIZE,
name, &info);
- todo_wine
- {
- ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
- "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got %08x\n", hr);
- ok(info.dwAssemblyFlags == 0, "Expected 0, got %08x\n", info.dwAssemblyFlags);
- }
+ ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND),
+ "Expected HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), got %08x\n", hr);
+ ok(info.dwAssemblyFlags == 0, "Expected 0, got %08x\n", info.dwAssemblyFlags);
ok(info.cbAssemblyInfo == sizeof(ASSEMBLY_INFO),
"Expected sizeof(ASSEMBLY_INFO), got %d\n", info.cbAssemblyInfo);
ok(info.uliAssemblySizeInKB.u.HighPart == 0,
"Expected 0, got %d\n", info.uliAssemblySizeInKB.u.HighPart);
ok(info.uliAssemblySizeInKB.u.LowPart == 0,
"Expected 0, got %d\n", info.uliAssemblySizeInKB.u.LowPart);
- todo_wine
- {
- ok(!lstrcmpW(info.pszCurrentAssemblyPathBuf, empty),
- "Assembly path was changed\n");
- ok(info.cchBuf == MAX_PATH, "Expected MAX_PATH, got %d\n", info.cchBuf);
- }
+ ok(!lstrcmpW(info.pszCurrentAssemblyPathBuf, empty),
+ "Assembly path was changed\n");
+ ok(info.cchBuf == MAX_PATH, "Expected MAX_PATH, got %d\n", info.cchBuf);
/* display name is "wine, PublicKeyTokens=2d03617b1c31e2f5" */
INIT_ASM_INFO();
--
1.7.10
More information about the wine-patches
mailing list