crypt32/tests: CryptUnprotectData: test zero-length payload.
diff --git a/dlls/crypt32/tests/protectdata.c b/dlls/crypt32/tests/protectdata.c
index 82cf1aa..08ab72a 100644
--- a/dlls/crypt32/tests/protectdata.c
+++ b/dlls/crypt32/tests/protectdata.c
@@ -213,6 +213,34 @@
plain.cbData=0;
}
+static void test_simpleroundtrip(const char *plaintext, int wine_fails)
+{
+ DATA_BLOB input;
+ DATA_BLOB encrypted;
+ DATA_BLOB output;
+ int res;
+ WCHAR emptyW[1];
+
+ emptyW[0] = 0;
+ input.pbData = (unsigned char *)plaintext;
+ input.cbData = strlen(plaintext);
+ res = pCryptProtectData(&input, emptyW, NULL, NULL, NULL, 0, &encrypted);
+ ok(res != 0, "can't protect\n");
+
+ res = pCryptUnprotectData(&encrypted, NULL, NULL, NULL, NULL, 0, &output);
+ if (wine_fails) {
+ todo_wine
+ ok(res != 0, "can't unprotect; last error %u\n", GetLastError());
+ } else {
+ ok(res != 0, "can't unprotect; last error %u\n", GetLastError());
+ }
+
+ if (res) {
+ ok(output.cbData == strlen(plaintext), "output wrong length %d for input '%s', wanted %d\n", output.cbData, plaintext, strlen(plaintext));
+ ok(!memcmp(plaintext, (char *)output.pbData, output.cbData), "output wrong contents for input '%s'\n", plaintext);
+ }
+}
+
START_TEST(protectdata)
{
HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
@@ -228,6 +256,8 @@
protected=FALSE;
test_cryptprotectdata();
test_cryptunprotectdata();
+ test_simpleroundtrip("", 1);
+ test_simpleroundtrip("hello", 0);
/* deinit globals here */
if (cipher.pbData) LocalFree(cipher.pbData);