Hans Leidekker : fusion: Handle DWORD-sized blob indices when loading the public key.
Alexandre Julliard
julliard at winehq.org
Wed May 23 13:22:54 CDT 2012
Module: wine
Branch: master
Commit: 7c06862c52683dc230dd0f372eaf8fb6a5d3284a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7c06862c52683dc230dd0f372eaf8fb6a5d3284a
Author: Hans Leidekker <hans at codeweavers.com>
Date: Wed May 23 13:05:14 2012 +0200
fusion: Handle DWORD-sized blob indices when loading the public key.
---
dlls/fusion/assembly.c | 19 ++++++++++++-------
1 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/dlls/fusion/assembly.c b/dlls/fusion/assembly.c
index 46c4db4..b655df1 100644
--- a/dlls/fusion/assembly.c
+++ b/dlls/fusion/assembly.c
@@ -825,23 +825,22 @@ PEKIND assembly_get_architecture(ASSEMBLY *assembly)
return peI386; /* x86 assembly */
}
-static BYTE *assembly_get_blob(ASSEMBLY *assembly, WORD index, ULONG *size)
+static BYTE *assembly_get_blob(ASSEMBLY *assembly, DWORD index, ULONG *size)
{
return GetData(&assembly->blobs[index], size);
}
HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
{
- ASSEMBLYTABLE *asmtbl;
ULONG i, size;
LONG offset;
- BYTE *hashdata;
+ BYTE *hashdata, *pubkey, *ptr;
HCRYPTPROV crypt;
HCRYPTHASH hash;
- BYTE *pubkey;
BYTE tokbytes[BYTES_PER_TOKEN];
HRESULT hr = E_FAIL;
LPWSTR tok;
+ DWORD idx;
*token = NULL;
@@ -849,11 +848,17 @@ HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token)
if (offset == -1)
return E_FAIL;
- asmtbl = assembly_data_offset(assembly, offset);
- if (!asmtbl)
+ ptr = assembly_data_offset(assembly, offset);
+ if (!ptr)
return E_FAIL;
- pubkey = assembly_get_blob(assembly, asmtbl->PublicKey, &size);
+ ptr += FIELD_OFFSET(ASSEMBLYTABLE, PublicKey);
+ if (assembly->blobsz == sizeof(DWORD))
+ idx = *(DWORD *)ptr;
+ else
+ idx = *(WORD *)ptr;
+
+ pubkey = assembly_get_blob(assembly, idx, &size);
if (!CryptAcquireContextA(&crypt, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
More information about the wine-cvs
mailing list