From: Paul Gofman <pgofman(a)codeweavers.com>
---
dlls/wintrust/softpub.c | 5 +++++
dlls/wintrust/tests/softpub.c | 6 +++---
dlls/wintrust/wintrust_main.c | 4 ++++
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/dlls/wintrust/softpub.c b/dlls/wintrust/softpub.c
index f6fc6af7276..4e740997a7d 100644
--- a/dlls/wintrust/softpub.c
+++ b/dlls/wintrust/softpub.c
@@ -908,6 +908,11 @@ HRESULT WINAPI SoftpubLoadSignature(CRYPT_PROVIDER_DATA *data)
data->pSigState->hPrimarySig = CryptMsgDuplicate(data->hMsg);
load_secondary_signatures(data, data->pSigState->hPrimarySig);
}
+ if (data->pSigSettings)
+ {
+ if (data->pSigSettings->dwFlags & WSS_GET_SECONDARY_SIG_COUNT)
+ data->pSigSettings->cSecondarySigs =
data->pSigState->cSecondarySigs;
+ }
}
if (!err && data->hMsg)
diff --git a/dlls/wintrust/tests/softpub.c b/dlls/wintrust/tests/softpub.c
index eb411bc7daf..77e15b2feb4 100644
--- a/dlls/wintrust/tests/softpub.c
+++ b/dlls/wintrust/tests/softpub.c
@@ -1830,7 +1830,7 @@ static void test_multiple_signatures(void)
prov = (CRYPT_PROVIDER_DATA *)data.hWVTStateData;
ok(prov->cbStruct == sizeof(*prov), "Got size %lu.\n",
prov->cbStruct);
ok(prov->csSigners == 1, "Got %lu.\n", prov->csSigners);
- todo_wine ok(prov->pSigSettings == &settings, "Got %p, expected
%p.\n", prov->pSigSettings, &settings);
+ ok(prov->pSigSettings == &settings, "Got %p, expected %p.\n",
prov->pSigSettings, &settings);
ok(!!prov->pSigState, "Got %p, expected %p.\n", prov->pSigSettings,
&settings);
if (prov->cbStruct == sizeof(*prov) && prov->pSigState)
{
@@ -1867,7 +1867,7 @@ static void test_multiple_signatures(void)
settings.dwVerifiedSigIndex = 0xcccccccc;
status = WinVerifyTrust(NULL, &WVTPolicyGUID, &data);
todo_wine ok(status == CERT_E_UNTRUSTEDROOT || status == CERT_E_CHAINING,
"Failed, ret %#lx\n", status);
- todo_wine ok(settings.cSecondarySigs == 2, "Got %lu.\n",
settings.cSecondarySigs);
+ ok(settings.cSecondarySigs == 2, "Got %lu.\n", settings.cSecondarySigs);
todo_wine ok(settings.dwVerifiedSigIndex == 2, "Got %lu.\n",
settings.dwVerifiedSigIndex);
data.dwStateAction = WTD_STATEACTION_CLOSE;
@@ -1881,7 +1881,7 @@ static void test_multiple_signatures(void)
settings.dwIndex = 1;
status = WinVerifyTrust(NULL, &WVTPolicyGUID, &data);
todo_wine ok(status == CERT_E_UNTRUSTEDROOT || status == CERT_E_CHAINING,
"Failed, ret %#lx\n", status);
- todo_wine ok(settings.cSecondarySigs == 2, "Got %lu.\n",
settings.cSecondarySigs);
+ ok(settings.cSecondarySigs == 2, "Got %lu.\n", settings.cSecondarySigs);
todo_wine ok(settings.dwVerifiedSigIndex == 1, "Got %lu.\n",
settings.dwVerifiedSigIndex);
settings.dwIndex = 0;
diff --git a/dlls/wintrust/wintrust_main.c b/dlls/wintrust/wintrust_main.c
index 33695008b24..925ae7ca85a 100644
--- a/dlls/wintrust/wintrust_main.c
+++ b/dlls/wintrust/wintrust_main.c
@@ -294,6 +294,10 @@ static LONG WINTRUST_DefaultVerify(HWND hwnd, GUID *actionID,
data->hWVTStateData = provData;
provData->pWintrustData = data;
+
+ if (WVT_ISINSTRUCT(WINTRUST_DATA, data->cbStruct, pSignatureSettings))
+ provData->pSigSettings = data->pSignatureSettings;
+
if (hwnd == INVALID_HANDLE_VALUE)
provData->hWndParent = GetDesktopWindow();
else
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/980