fusion: return correct error for null public token (try 2)

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Mon Feb 4 04:29:31 CST 2013


Hi,
The other fusion patch is superseded by this one.

Changelog:
        fusion: return correct error for null public token


Best Regards
     Alistair Leslie-Hughes



-------------- next part --------------
>From 2b296c0ad7f65e27ace7fb44b7b0d1ea73bb0b33 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Thu, 31 Jan 2013 16:08:38 +1100
Subject: [PATCH] return correct error for null public token.
To: wine-patches <wine-patches at winehq.org>

---
 dlls/fusion/asmname.c        |    4 ++++
 dlls/fusion/tests/asmcache.c |   19 +++++++++++++++++++
 include/corerror.h           |    1 +
 3 files changed, 24 insertions(+)

diff --git a/dlls/fusion/asmname.c b/dlls/fusion/asmname.c
index 162a76b..fa84e53 100644
--- a/dlls/fusion/asmname.c
+++ b/dlls/fusion/asmname.c
@@ -561,6 +561,10 @@ static HRESULT parse_pubkey(IAssemblyNameImpl *name, LPCWSTR pubkey)
 {
     int i;
     BYTE val;
+    static const WCHAR nullstr[] = {'n','u','l','l',0};
+
+    if(lstrcmpiW(pubkey, nullstr) == 0)
+        return FUSION_E_PRIVATE_ASM_DISALLOWED;
 
     if (lstrlenW(pubkey) < CHARS_PER_PUBKEY)
         return FUSION_E_INVALID_NAME;
diff --git a/dlls/fusion/tests/asmcache.c b/dlls/fusion/tests/asmcache.c
index e97cfbe..320a938 100644
--- a/dlls/fusion/tests/asmcache.c
+++ b/dlls/fusion/tests/asmcache.c
@@ -1016,6 +1016,13 @@ static void test_QueryAssemblyInfo(void)
         '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};
+    static const WCHAR nullpublickey[] = {
+        'm','s','c','o','r','l','i','b','.','d','l','l',',','v','e','r','s','i','o','n','=','0','.','0','.',
+        '0','.','0',',','c','u','l','t','u','r','e','=','n','e','u','t','r','a','l',',',
+        'p','u','b','l','i','c','K','e','y','T','o','k','e','n','=','n','u','l','l',0};
+    static const WCHAR nullpublickey1[] = {
+        'm','s','c','o','r','l','i','b','.','d','l','l',',',
+        'p','u','b','l','i','c','K','e','y','T','o','k','e','n','=','n','u','L','l',0};
 
     size = MAX_PATH;
     hr = pGetCachePath(ASM_CACHE_GAC, asmpath, &size);
@@ -1386,6 +1393,18 @@ 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 "mscorlib.dll,version=0.0.0.0,culture=neutral,publicKeyToken=null" */
+    INIT_ASM_INFO();
+    lstrcpyW(name, nullpublickey);
+    hr = IAssemblyCache_QueryAssemblyInfo(cache, 0, name, &info);
+    ok(hr == FUSION_E_PRIVATE_ASM_DISALLOWED, "got %08x\n", hr);
+
+    /* display name is "mscorlib.dll,publicKeyToken=nuLl" */
+    INIT_ASM_INFO();
+    lstrcpyW(name, nullpublickey1);
+    hr = IAssemblyCache_QueryAssemblyInfo(cache, 0, name, &info);
+    ok(hr == FUSION_E_PRIVATE_ASM_DISALLOWED, "got %08x\n", hr);
+
     /* display name is "wine, Culture=neutral" */
     INIT_ASM_INFO();
     lstrcpyW(name, wine);
diff --git a/include/corerror.h b/include/corerror.h
index 1537f93..3ddfe47 100644
--- a/include/corerror.h
+++ b/include/corerror.h
@@ -119,6 +119,7 @@
 #define COR_E_HOSTPROTECTION            EMAKEHR(0x1640)
 #define COR_E_ILLEGAL_REENTRANCY        EMAKEHR(0x1641)
 
+#define FUSION_E_PRIVATE_ASM_DISALLOWED EMAKEHR(0x1044)
 #define FUSION_E_INVALID_NAME           EMAKEHR(0x1047)
 
 #define CLDB_E_FILE_OLDVER              EMAKEHR(0x1107)
-- 
1.7.10.4



More information about the wine-patches mailing list