Module: wine Branch: master Commit: 86e2f94e68ca198cae7bb0037f0d8f5c166b6385 URL: http://source.winehq.org/git/wine.git/?a=commit;h=86e2f94e68ca198cae7bb0037f...
Author: Juan Lang juan.lang@gmail.com Date: Thu Dec 11 15:23:31 2008 -0800
crypt32: Don't claim to have queried an object as a serialized context when reading it has failed.
---
dlls/crypt32/object.c | 3 +++ dlls/crypt32/tests/object.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/crypt32/object.c b/dlls/crypt32/object.c index f6e0c84..0674c79 100644 --- a/dlls/crypt32/object.c +++ b/dlls/crypt32/object.c @@ -163,6 +163,7 @@ static BOOL CRYPT_QuerySerializedContextObject(DWORD dwObjectType, if (!ret) return FALSE;
+ ret = FALSE; context = CRYPT_ReadSerializedElement(blob->pbData, blob->cbData, CERT_STORE_ALL_CONTEXT_FLAG, &contextType); if (context) @@ -563,6 +564,8 @@ BOOL WINAPI CryptQueryObject(DWORD dwObjectType, const void *pvObject, dwExpectedContentTypeFlags, pdwMsgAndCertEncodingType, pdwContentType, phCertStore, phMsg); } + if (!ret) + SetLastError(CRYPT_E_NO_MATCH); TRACE("returning %d\n", ret); return ret; } diff --git a/dlls/crypt32/tests/object.c b/dlls/crypt32/tests/object.c index 23f3597..6e440c6 100644 --- a/dlls/crypt32/tests/object.c +++ b/dlls/crypt32/tests/object.c @@ -152,13 +152,13 @@ static void test_query_object(void) ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob, CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + todo_wine ok(ret, "CryptQueryObject failed: %08x\n", GetLastError()); /* The same base64-encoded cert, restricting the format types */ SetLastError(0xdeadbeef); ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob, CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_BINARY, 0, NULL, NULL, NULL, NULL, NULL, NULL); - todo_wine ok(!ret && GetLastError() == CRYPT_E_NO_MATCH, "expected CRYPT_E_NO_MATCH, got %08x\n", GetLastError()); SetLastError(0xdeadbeef); @@ -174,7 +174,6 @@ static void test_query_object(void) ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob, CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL, NULL, NULL, NULL, NULL); - todo_wine ok(!ret && GetLastError() == CRYPT_E_NO_MATCH, "expected CRYPT_E_NO_MATCH, got %08x\n", GetLastError()); /* For brevity, not tested here, but tested on Windows: same failure @@ -195,6 +194,7 @@ static void test_query_object(void) ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob, CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + todo_wine ok(ret, "CryptQueryObject failed: %08x\n", GetLastError()); /* A valid signed message, encoded as a wide character base64 string, can * be queried successfully. @@ -205,12 +205,12 @@ static void test_query_object(void) ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob, CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL, NULL, NULL, NULL, NULL); + todo_wine ok(ret, "CryptQueryObject failed: %08x\n", GetLastError()); SetLastError(0xdeadbeef); ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob, CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_BINARY, 0, NULL, NULL, NULL, NULL, NULL, NULL); - todo_wine ok(!ret && GetLastError() == CRYPT_E_NO_MATCH, "expected CRYPT_E_NO_MATCH, got %08x\n", GetLastError()); SetLastError(0xdeadbeef);