From d3beb5056ec31fa8b926f3f8639896b94d74b73e Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Wed, 23 Jul 2008 21:47:42 -0700 Subject: [PATCH] crypt32: 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 869e2a95ca..f8e8be4561 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 69bc18c01b..b01229c0ce 100644 --- a/dlls/crypt32/tests/sip.c +++ b/dlls/crypt32/tests/sip.c @@ -274,10 +274,8 @@ static void test_SIPRetrieveSubjectGUID(void) SetLastError(0xdeadbeef); memset(&subject, 1, sizeof(GUID)); ret = CryptSIPRetrieveSubjectGuid(tempfileW, 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 */