[PATCH 3/3] wintrust: Don't fail CryptCATOpen if file is empty or its data invalid.
Rémi Bernon
rbernon at codeweavers.com
Wed Dec 16 07:41:42 CST 2020
Fixes a regression from 699e0a55ea71e2506917e38fc85cb4ae23a9cd1a,
making "winetricks dotnet30sp1" fail.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49831
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
Note that sometimes (often?) "winetricks dotnet30sp1" still fails early
because NetFx20SP1_x86.exe fails to install. It's unrelated, and happens
spuriously.
dlls/wintrust/crypt.c | 5 ++++-
dlls/wintrust/tests/crypt.c | 12 ++++++------
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/dlls/wintrust/crypt.c b/dlls/wintrust/crypt.c
index e9a58a84ac4..2a780e57546 100644
--- a/dlls/wintrust/crypt.c
+++ b/dlls/wintrust/crypt.c
@@ -935,7 +935,7 @@ HANDLE WINAPI CryptCATOpen(WCHAR *filename, DWORD flags, HCRYPTPROV hProv,
size = GetFileSize(file, NULL);
if (!(buffer = HeapAlloc(GetProcessHeap(), 0, size))) goto failed_alloc;
- if (!ReadFile(file, buffer, size, &size, NULL) || !CryptMsgUpdate(hmsg, buffer, size, TRUE)) goto failed;
+ if (!ReadFile(file, buffer, size, &size, NULL) || !CryptMsgUpdate(hmsg, buffer, size, TRUE)) goto done;
size = sizeof(DWORD);
if (!CryptMsgGetParam(hmsg, CMSG_ATTR_CERT_COUNT_PARAM, 0, &cc->attr_count, &size)) goto failed;
@@ -955,9 +955,12 @@ HANDLE WINAPI CryptCATOpen(WCHAR *filename, DWORD flags, HCRYPTPROV hProv,
}
cc->inner = decode_inner_content(hmsg, dwEncodingType, &cc->inner_len);
if (!cc->inner || !CryptSIPRetrieveSubjectGuid(filename, NULL, &cc->subject)) goto failed;
+
+done:
cc->magic = CRYPTCAT_MAGIC;
HeapFree(GetProcessHeap(), 0, buffer);
CloseHandle(file);
+ SetLastError(ERROR_SUCCESS);
return cc;
failed_alloc:
diff --git a/dlls/wintrust/tests/crypt.c b/dlls/wintrust/tests/crypt.c
index 1b436e9f4ab..5f9c402e00f 100644
--- a/dlls/wintrust/tests/crypt.c
+++ b/dlls/wintrust/tests/crypt.c
@@ -429,10 +429,10 @@ static void test_CryptCATOpen(void)
}
else
{
- todo_wine ok(cat != INVALID_HANDLE_VALUE, "flags %#x: expected success\n", flags);
- todo_wine ok(!GetLastError(), "flags %#x: got error %u\n", flags, GetLastError());
+ ok(cat != INVALID_HANDLE_VALUE, "flags %#x: expected success\n", flags);
+ ok(!GetLastError(), "flags %#x: got error %u\n", flags, GetLastError());
ret = pCryptCATClose(cat);
- todo_wine ok(ret, "flags %#x: failed to close file\n", flags);
+ ok(ret, "flags %#x: failed to close file\n", flags);
ret = DeleteFileW(filename);
ok(ret, "flags %#x: failed to delete file, error %u\n", flags, GetLastError());
}
@@ -443,10 +443,10 @@ static void test_CryptCATOpen(void)
SetLastError(0xdeadbeef);
cat = pCryptCATOpen(filename, flags, 0, 0, 0);
- todo_wine ok(cat != INVALID_HANDLE_VALUE, "flags %#x: expected success\n", flags);
- todo_wine ok(!GetLastError(), "flags %#x: got error %u\n", flags, GetLastError());
+ ok(cat != INVALID_HANDLE_VALUE, "flags %#x: expected success\n", flags);
+ ok(!GetLastError(), "flags %#x: got error %u\n", flags, GetLastError());
ret = pCryptCATClose(cat);
- todo_wine ok(ret, "flags %#x: failed to close file\n", flags);
+ ok(ret, "flags %#x: failed to close file\n", flags);
file = _wfopen(filename, L"r");
ret = fread(buffer, 1, sizeof(buffer), file);
--
2.29.2
More information about the wine-devel
mailing list