From 421a690d7126da59d7f544bab5dee59d3cdc7c2a Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Wed, 23 Jul 2008 17:41:43 -0700 Subject: [PATCH] Add cab file checking to CryptSIPRetrieveSubjectGUID --- dlls/crypt32/sip.c | 11 ++++++++++- dlls/crypt32/tests/sip.c | 2 -- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dlls/crypt32/sip.c b/dlls/crypt32/sip.c index 869e2a9..f8e8be4 100644 --- a/dlls/crypt32/sip.c +++ b/dlls/crypt32/sip.c @@ -283,6 +283,8 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid IMAGE_DOS_HEADER *dos; /* FIXME, find out if there is a name for this GUID */ static const GUID unknown = { 0xC689AAB8, 0x8E78, 0x11D0, { 0x8C,0x47,0x00,0xC0,0x4F,0xC2,0x95,0xEE }}; + static const GUID cabGUID = { 0xc689aaba, 0x8e78, 0x11d0, {0x8c,0x47,0x00,0xc0,0x4f,0xc2,0x95,0xee }}; + static const BYTE cabHdr[] = { 'M','S','C','F' }; TRACE("(%s %p %p)\n", wine_dbgstr_w(FileName), hFileIn, pgSubject); @@ -330,10 +332,17 @@ BOOL WINAPI CryptSIPRetrieveSubjectGuid bRet = TRUE; goto cleanup1; } + /* Quick-n-dirty check for a cab file. FIXME: use FDIIsCabinet instead? */ + if (!memcmp(pMapped, cabHdr, sizeof(cabHdr))) + { + *pgSubject = cabGUID; + SetLastError(S_OK); + bRet = TRUE; + goto cleanup1; + } /* FIXME * There is a lot more to be checked: - * - Check for MSFC in the header * - Check for the keys CryptSIPDllIsMyFileType and CryptSIPDllIsMyFileType2 * under HKLM\Software\Microsoft\Cryptography\OID\EncodingType 0. Here are * functions listed that need check if a SIP Provider can deal with the diff --git a/dlls/crypt32/tests/sip.c b/dlls/crypt32/tests/sip.c index 7f00af0..8970340 100644 --- a/dlls/crypt32/tests/sip.c +++ b/dlls/crypt32/tests/sip.c @@ -502,10 +502,8 @@ static void test_SIPRetrieveSubjectGUID( SetLastError(0xdeadbeef); memset(&subject, 1, sizeof(GUID)); ret = CryptSIPRetrieveSubjectGuid(extractW, NULL, &subject); - todo_wine ok( ret, "CryptSIPRetrieveSubjectGuid failed: %d (0x%08x)\n", GetLastError(), GetLastError() ); - todo_wine ok ( !memcmp(&subject, &cabGUID, sizeof(GUID)), "Expected GUID %s for cabinet file, not %s\n", show_guid(&cabGUID, guid1), show_guid(&subject, guid2)); /* Clean up */ -- 1.4.1