Module: wine Branch: master Commit: 2a51df3b7aa3070bbc4cad00eff36efa0fd20c37 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2a51df3b7aa3070bbc4cad00ef...
Author: James Hawkins jhawkins@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;