James Hawkins : fusion: Handle DWORD-sized string indices when loading the assembly name.
Alexandre Julliard
julliard at winehq.org
Wed Jul 16 13:33:05 CDT 2008
Module: wine
Branch: master
Commit: 2a51df3b7aa3070bbc4cad00eff36efa0fd20c37
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2a51df3b7aa3070bbc4cad00eff36efa0fd20c37
Author: James Hawkins <jhawkins at codeweavers.com>
Date: Wed Jul 16 10:57:44 2008 -0500
fusion: Handle DWORD-sized string indices when loading the assembly name.
---
dlls/fusion/assembly.c | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/dlls/fusion/assembly.c b/dlls/fusion/assembly.c
index b8b7719..9fcde8f 100644
--- a/dlls/fusion/assembly.c
+++ b/dlls/fusion/assembly.c
@@ -735,7 +735,7 @@ HRESULT assembly_release(ASSEMBLY *assembly)
return S_OK;
}
-static LPSTR assembly_dup_str(ASSEMBLY *assembly, WORD index)
+static LPSTR assembly_dup_str(ASSEMBLY *assembly, DWORD index)
{
LPSTR str = (LPSTR)&assembly->strings[index];
LPSTR cpy = HeapAlloc(GetProcessHeap(), 0, strlen(str)+1);
@@ -746,18 +746,25 @@ static LPSTR assembly_dup_str(ASSEMBLY *assembly, WORD index)
HRESULT assembly_get_name(ASSEMBLY *assembly, LPSTR *name)
{
- ASSEMBLYTABLE *asmtbl;
+ BYTE *ptr;
ULONG offset;
+ DWORD stridx;
offset = assembly->tables[TableFromToken(mdtAssembly)].offset;
if (offset == -1)
return E_FAIL;
- asmtbl = (ASSEMBLYTABLE *)assembly_data_offset(assembly, offset);
- if (!asmtbl)
+ ptr = assembly_data_offset(assembly, offset);
+ if (!ptr)
return E_FAIL;
- *name = assembly_dup_str(assembly, asmtbl->Name);
+ ptr += FIELD_OFFSET(ASSEMBLYTABLE, PublicKey) + assembly->blobsz;
+ if (assembly->stringsz == sizeof(DWORD))
+ stridx = *((DWORD *)ptr);
+ else
+ stridx = *((WORD *)ptr);
+
+ *name = assembly_dup_str(assembly, stridx);
if (!*name)
return E_OUTOFMEMORY;
More information about the wine-cvs
mailing list