aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2022-08-31 16:07:08 -0400
committerBob Arnson <github@bobs.org>2022-08-31 19:59:16 -0400
commit914a92d16d7a0245f3cf0b42cc5e320c34d23d30 (patch)
treef145e999fc4ccefa2e92466a45b602f080a32440 /src/burn
parentf6c86c939af9f8b0036f4b197512f06e861e5fd3 (diff)
downloadwix-914a92d16d7a0245f3cf0b42cc5e320c34d23d30.tar.gz
wix-914a92d16d7a0245f3cf0b42cc5e320c34d23d30.tar.bz2
wix-914a92d16d7a0245f3cf0b42cc5e320c34d23d30.zip
Supply hashes to BA if present in update feed.
Fixes https://github.com/wixtoolset/issues/issues/6353.
Diffstat (limited to 'src/burn')
-rw-r--r--src/burn/engine/detect.cpp24
-rw-r--r--src/burn/engine/userexperience.cpp5
-rw-r--r--src/burn/engine/userexperience.h2
3 files changed, 27 insertions, 4 deletions
diff --git a/src/burn/engine/detect.cpp b/src/burn/engine/detect.cpp
index 7628b26a..25d184c1 100644
--- a/src/burn/engine/detect.cpp
+++ b/src/burn/engine/detect.cpp
@@ -379,6 +379,7 @@ static HRESULT DetectAtomFeedUpdate(
379 ATOM_FEED* pAtomFeed = NULL; 379 ATOM_FEED* pAtomFeed = NULL;
380 APPLICATION_UPDATE_CHAIN* pApupChain = NULL; 380 APPLICATION_UPDATE_CHAIN* pApupChain = NULL;
381 BOOL fStopProcessingUpdates = FALSE; 381 BOOL fStopProcessingUpdates = FALSE;
382 LPWSTR sczHash = NULL;
382 383
383 hr = AtomInitialize(); 384 hr = AtomInitialize();
384 ExitOnFailure(hr, "Failed to initialize Atom."); 385 ExitOnFailure(hr, "Failed to initialize Atom.");
@@ -397,11 +398,25 @@ static HRESULT DetectAtomFeedUpdate(
397 for (DWORD i = 0; i < pApupChain->cEntries; ++i) 398 for (DWORD i = 0; i < pApupChain->cEntries; ++i)
398 { 399 {
399 APPLICATION_UPDATE_ENTRY* pAppUpdateEntry = &pApupChain->rgEntries[i]; 400 APPLICATION_UPDATE_ENTRY* pAppUpdateEntry = &pApupChain->rgEntries[i];
401 APPLICATION_UPDATE_ENCLOSURE* pEnclosure = pAppUpdateEntry->rgEnclosures;
400 402
401 hr = UserExperienceOnDetectUpdate(pUX, pAppUpdateEntry->rgEnclosures ? pAppUpdateEntry->rgEnclosures->wzUrl : NULL, 403 if (pEnclosure)
402 pAppUpdateEntry->rgEnclosures ? pAppUpdateEntry->rgEnclosures->dw64Size : 0, 404 {
403 pAppUpdateEntry->pVersion, pAppUpdateEntry->wzTitle, 405 hr = StrAllocHexEncode(pEnclosure->rgbDigest, pEnclosure->cbDigest, &sczHash);
404 pAppUpdateEntry->wzSummary, pAppUpdateEntry->wzContentType, pAppUpdateEntry->wzContent, &fStopProcessingUpdates); 406 ExitOnFailure(hr, "Failed to encode hash as string.");
407 }
408
409 hr = UserExperienceOnDetectUpdate(pUX,
410 pEnclosure ? pEnclosure->wzUrl : NULL,
411 pEnclosure ? pEnclosure->dw64Size : 0,
412 sczHash ? sczHash : L"",
413 pEnclosure ? pEnclosure->digestAlgorithm == APUP_HASH_ALGORITHM_SHA512 ? BOOTSTRAPPER_UPDATE_HASH_TYPE_SHA512 : BOOTSTRAPPER_UPDATE_HASH_TYPE_NONE : BOOTSTRAPPER_UPDATE_HASH_TYPE_NONE,
414 pAppUpdateEntry->pVersion,
415 pAppUpdateEntry->wzTitle,
416 pAppUpdateEntry->wzSummary,
417 pAppUpdateEntry->wzContentType,
418 pAppUpdateEntry->wzContent,
419 &fStopProcessingUpdates);
405 ExitOnRootFailure(hr, "BA aborted detect update."); 420 ExitOnRootFailure(hr, "BA aborted detect update.");
406 421
407 if (fStopProcessingUpdates) 422 if (fStopProcessingUpdates)
@@ -420,6 +435,7 @@ LExit:
420 ApupFreeChain(pApupChain); 435 ApupFreeChain(pApupChain);
421 AtomFreeFeed(pAtomFeed); 436 AtomFreeFeed(pAtomFeed);
422 ReleaseStr(sczUpdateFeedTempFile); 437 ReleaseStr(sczUpdateFeedTempFile);
438 ReleaseStr(sczHash);
423 AtomUninitialize(); 439 AtomUninitialize();
424 440
425 return hr; 441 return hr;
diff --git a/src/burn/engine/userexperience.cpp b/src/burn/engine/userexperience.cpp
index 6f84caba..28429394 100644
--- a/src/burn/engine/userexperience.cpp
+++ b/src/burn/engine/userexperience.cpp
@@ -1395,6 +1395,8 @@ EXTERN_C BAAPI UserExperienceOnDetectUpdate(
1395 __in BURN_USER_EXPERIENCE* pUserExperience, 1395 __in BURN_USER_EXPERIENCE* pUserExperience,
1396 __in_z_opt LPCWSTR wzUpdateLocation, 1396 __in_z_opt LPCWSTR wzUpdateLocation,
1397 __in DWORD64 dw64Size, 1397 __in DWORD64 dw64Size,
1398 __in_z_opt LPCWSTR wzHash,
1399 __in BOOTSTRAPPER_UPDATE_HASH_TYPE hashAlgorithm,
1398 __in VERUTIL_VERSION* pVersion, 1400 __in VERUTIL_VERSION* pVersion,
1399 __in_z_opt LPCWSTR wzTitle, 1401 __in_z_opt LPCWSTR wzTitle,
1400 __in_z_opt LPCWSTR wzSummary, 1402 __in_z_opt LPCWSTR wzSummary,
@@ -1410,6 +1412,8 @@ EXTERN_C BAAPI UserExperienceOnDetectUpdate(
1410 args.cbSize = sizeof(args); 1412 args.cbSize = sizeof(args);
1411 args.wzUpdateLocation = wzUpdateLocation; 1413 args.wzUpdateLocation = wzUpdateLocation;
1412 args.dw64Size = dw64Size; 1414 args.dw64Size = dw64Size;
1415 args.wzHash = wzHash;
1416 args.hashAlgorithm = hashAlgorithm;
1413 args.wzVersion = pVersion->sczVersion; 1417 args.wzVersion = pVersion->sczVersion;
1414 args.wzTitle = wzTitle; 1418 args.wzTitle = wzTitle;
1415 args.wzSummary = wzSummary; 1419 args.wzSummary = wzSummary;
@@ -1426,6 +1430,7 @@ EXTERN_C BAAPI UserExperienceOnDetectUpdate(
1426 { 1430 {
1427 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT); 1431 hr = HRESULT_FROM_WIN32(ERROR_INSTALL_USEREXIT);
1428 } 1432 }
1433
1429 *pfStopProcessingUpdates = results.fStopProcessingUpdates; 1434 *pfStopProcessingUpdates = results.fStopProcessingUpdates;
1430 1435
1431LExit: 1436LExit:
diff --git a/src/burn/engine/userexperience.h b/src/burn/engine/userexperience.h
index 9f183208..e342da03 100644
--- a/src/burn/engine/userexperience.h
+++ b/src/burn/engine/userexperience.h
@@ -332,6 +332,8 @@ BAAPI UserExperienceOnDetectUpdate(
332 __in BURN_USER_EXPERIENCE* pUserExperience, 332 __in BURN_USER_EXPERIENCE* pUserExperience,
333 __in_z_opt LPCWSTR wzUpdateLocation, 333 __in_z_opt LPCWSTR wzUpdateLocation,
334 __in DWORD64 dw64Size, 334 __in DWORD64 dw64Size,
335 __in_z_opt LPCWSTR wzHash,
336 __in BOOTSTRAPPER_UPDATE_HASH_TYPE hashAlgorithm,
335 __in VERUTIL_VERSION* pVersion, 337 __in VERUTIL_VERSION* pVersion,
336 __in_z_opt LPCWSTR wzTitle, 338 __in_z_opt LPCWSTR wzTitle,
337 __in_z_opt LPCWSTR wzSummary, 339 __in_z_opt LPCWSTR wzSummary,