Juan Lang : crypt32: Test CryptMsgUpdate for data messages opened to encode .

Alexandre Julliard julliard at wine.codeweavers.com
Fri Jun 29 08:14:37 CDT 2007


Module: wine
Branch: master
Commit: bd05e2abe33d042675b56a3d066a3762463e15ca
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=bd05e2abe33d042675b56a3d066a3762463e15ca

Author: Juan Lang <juan.lang at gmail.com>
Date:   Thu Jun 28 16:46:33 2007 -0700

crypt32: Test CryptMsgUpdate for data messages opened to encode.

---

 dlls/crypt32/tests/msg.c |   62 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/dlls/crypt32/tests/msg.c b/dlls/crypt32/tests/msg.c
index 8bebdb9..2b0b3fe 100644
--- a/dlls/crypt32/tests/msg.c
+++ b/dlls/crypt32/tests/msg.c
@@ -300,9 +300,71 @@ static void test_data_msg_open(void)
     CryptMsgClose(msg);
 }
 
+static const BYTE msgData[] = { 1, 2, 3, 4 };
+
+static void test_data_msg_update(void)
+{
+    HCRYPTMSG msg;
+    BOOL ret;
+
+    msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
+     NULL);
+    /* Can't update a message that wasn't opened detached with final = FALSE */
+    SetLastError(0xdeadbeef);
+    ret = CryptMsgUpdate(msg, NULL, 0, FALSE);
+    todo_wine
+    ok(!ret && GetLastError() == CRYPT_E_MSG_ERROR,
+     "Expected CRYPT_E_MSG_ERROR, got %x\n", GetLastError());
+    /* Updating it with final = TRUE succeeds */
+    ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
+    ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
+    /* Any subsequent update will fail, as the last was final */
+    SetLastError(0xdeadbeef);
+    ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
+    todo_wine
+    ok(!ret && GetLastError() == CRYPT_E_MSG_ERROR,
+     "Expected CRYPT_E_MSG_ERROR, got %x\n", GetLastError());
+    CryptMsgClose(msg);
+
+    msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
+     NULL);
+    /* Can't update a message with no data */
+    SetLastError(0xdeadbeef);
+    ret = CryptMsgUpdate(msg, NULL, 0, TRUE);
+    todo_wine {
+    ok(!ret && GetLastError() == E_INVALIDARG,
+     "Expected E_INVALIDARG, got %x\n", GetLastError());
+    /* Curiously, a valid update will now fail as well, presumably because of
+     * the last (invalid, but final) update.
+     */
+    ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
+    ok(!ret && GetLastError() == CRYPT_E_MSG_ERROR,
+     "Expected CRYPT_E_MSG_ERROR, got %x\n", GetLastError());
+    }
+    CryptMsgClose(msg);
+
+    msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, CMSG_DETACHED_FLAG,
+     CMSG_DATA, NULL, NULL, NULL);
+    /* Dont appear to be able to update CMSG-DATA with non-final updates */
+    SetLastError(0xdeadbeef);
+    ret = CryptMsgUpdate(msg, NULL, 0, FALSE);
+    todo_wine
+    ok(!ret && GetLastError() == E_INVALIDARG,
+     "Expected E_INVALIDARG, got %x\n", GetLastError());
+    SetLastError(0xdeadbeef);
+    ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
+    todo_wine
+    ok(!ret && GetLastError() == E_INVALIDARG,
+     "Expected E_INVALIDARG, got %x\n", GetLastError());
+    ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
+    ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
+    CryptMsgClose(msg);
+}
+
 static void test_data_msg(void)
 {
     test_data_msg_open();
+    test_data_msg_update();
 }
 
 START_TEST(msg)




More information about the wine-cvs mailing list