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