diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2020-10-18 14:05:51 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2020-10-24 20:07:21 -0500 |
| commit | bafc4f682a798eb375d32c1f4777664aceb1e15f (patch) | |
| tree | cc9bcec75252a7e4025e6efc28f1918ac8361e62 /src/engine/msiengine.cpp | |
| parent | 273c69f34311f4f4e5f6b5896e71d0788f12d96a (diff) | |
| download | wix-bafc4f682a798eb375d32c1f4777664aceb1e15f.tar.gz wix-bafc4f682a798eb375d32c1f4777664aceb1e15f.tar.bz2 wix-bafc4f682a798eb375d32c1f4777664aceb1e15f.zip | |
Update string versioning.
Update condition parsing to allow specific characters for versions.
Log every time an invalid version is parsed.
Diffstat (limited to 'src/engine/msiengine.cpp')
| -rw-r--r-- | src/engine/msiengine.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/engine/msiengine.cpp b/src/engine/msiengine.cpp index e274df28..47211309 100644 --- a/src/engine/msiengine.cpp +++ b/src/engine/msiengine.cpp | |||
| @@ -82,6 +82,11 @@ extern "C" HRESULT MsiEngineParsePackageFromXml( | |||
| 82 | hr = VerParseVersion(scz, 0, FALSE, &pPackage->Msi.pVersion); | 82 | hr = VerParseVersion(scz, 0, FALSE, &pPackage->Msi.pVersion); |
| 83 | ExitOnFailure(hr, "Failed to parse @Version: %ls", scz); | 83 | ExitOnFailure(hr, "Failed to parse @Version: %ls", scz); |
| 84 | 84 | ||
| 85 | if (pPackage->Msi.pVersion->fInvalid) | ||
| 86 | { | ||
| 87 | LogId(REPORT_WARNING, MSG_MANIFEST_INVALID_VERSION, scz); | ||
| 88 | } | ||
| 89 | |||
| 85 | // @UpgradeCode | 90 | // @UpgradeCode |
| 86 | hr = XmlGetAttributeEx(pixnMsiPackage, L"UpgradeCode", &pPackage->Msi.sczUpgradeCode); | 91 | hr = XmlGetAttributeEx(pixnMsiPackage, L"UpgradeCode", &pPackage->Msi.sczUpgradeCode); |
| 87 | if (E_NOTFOUND != hr) | 92 | if (E_NOTFOUND != hr) |
| @@ -420,6 +425,11 @@ extern "C" HRESULT MsiEngineDetectPackage( | |||
| 420 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pPackage->Msi.pInstalledVersion); | 425 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pPackage->Msi.pInstalledVersion); |
| 421 | ExitOnFailure(hr, "Failed to parse installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, pPackage->Msi.sczProductCode); | 426 | ExitOnFailure(hr, "Failed to parse installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, pPackage->Msi.sczProductCode); |
| 422 | 427 | ||
| 428 | if (pPackage->Msi.pInstalledVersion->fInvalid) | ||
| 429 | { | ||
| 430 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, pPackage->Msi.sczProductCode, sczInstalledVersion); | ||
| 431 | } | ||
| 432 | |||
| 423 | // compare versions | 433 | // compare versions |
| 424 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pPackage->Msi.pInstalledVersion, &nCompareResult); | 434 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pPackage->Msi.pInstalledVersion, &nCompareResult); |
| 425 | ExitOnFailure(hr, "Failed to compare version '%ls' to installed version: '%ls'", pPackage->Msi.pVersion->sczVersion, pPackage->Msi.pInstalledVersion->sczVersion); | 435 | ExitOnFailure(hr, "Failed to compare version '%ls' to installed version: '%ls'", pPackage->Msi.pVersion->sczVersion, pPackage->Msi.pInstalledVersion->sczVersion); |
| @@ -460,6 +470,11 @@ extern "C" HRESULT MsiEngineDetectPackage( | |||
| 460 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); | 470 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); |
| 461 | ExitOnFailure(hr, "Failed to parse dependency version: '%ls' for ProductCode: %ls", sczInstalledVersion, sczInstalledProductCode); | 471 | ExitOnFailure(hr, "Failed to parse dependency version: '%ls' for ProductCode: %ls", sczInstalledVersion, sczInstalledProductCode); |
| 462 | 472 | ||
| 473 | if (pVersion->fInvalid) | ||
| 474 | { | ||
| 475 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, sczInstalledProductCode, sczInstalledVersion); | ||
| 476 | } | ||
| 477 | |||
| 463 | // compare versions | 478 | // compare versions |
| 464 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pVersion, &nCompareResult); | 479 | hr = VerCompareParsedVersions(pPackage->Msi.pVersion, pVersion, &nCompareResult); |
| 465 | ExitOnFailure(hr, "Failed to compare version '%ls' to dependency version: '%ls'", pPackage->Msi.pVersion->sczVersion, pVersion->sczVersion); | 480 | ExitOnFailure(hr, "Failed to compare version '%ls' to dependency version: '%ls'", pPackage->Msi.pVersion->sczVersion, pVersion->sczVersion); |
| @@ -536,6 +551,11 @@ extern "C" HRESULT MsiEngineDetectPackage( | |||
| 536 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); | 551 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pVersion); |
| 537 | ExitOnFailure(hr, "Failed to parse related installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, wzProductCode); | 552 | ExitOnFailure(hr, "Failed to parse related installed version: '%ls' for ProductCode: %ls", sczInstalledVersion, wzProductCode); |
| 538 | 553 | ||
| 554 | if (pVersion->fInvalid) | ||
| 555 | { | ||
| 556 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, wzProductCode, sczInstalledVersion); | ||
| 557 | } | ||
| 558 | |||
| 539 | // compare versions | 559 | // compare versions |
| 540 | if (pRelatedMsi->fMinProvided) | 560 | if (pRelatedMsi->fMinProvided) |
| 541 | { | 561 | { |
| @@ -1052,6 +1072,11 @@ extern "C" HRESULT MsiEngineAddCompatiblePackage( | |||
| 1052 | 1072 | ||
| 1053 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pCompatiblePackage->Msi.pVersion); | 1073 | hr = VerParseVersion(sczInstalledVersion, 0, FALSE, &pCompatiblePackage->Msi.pVersion); |
| 1054 | ExitOnFailure(hr, "Failed to parse version: '%ls' for ProductCode: %ls", sczInstalledVersion, pCompatiblePackage->Msi.sczProductCode); | 1074 | ExitOnFailure(hr, "Failed to parse version: '%ls' for ProductCode: %ls", sczInstalledVersion, pCompatiblePackage->Msi.sczProductCode); |
| 1075 | |||
| 1076 | if (pCompatiblePackage->Msi.pVersion->fInvalid) | ||
| 1077 | { | ||
| 1078 | LogId(REPORT_WARNING, MSG_DETECTED_MSI_PACKAGE_INVALID_VERSION, pCompatiblePackage->Msi.sczProductCode, sczInstalledVersion); | ||
| 1079 | } | ||
| 1055 | } | 1080 | } |
| 1056 | 1081 | ||
| 1057 | // For now, copy enough information to support uninstalling the newer, compatible package. | 1082 | // For now, copy enough information to support uninstalling the newer, compatible package. |
| @@ -1506,6 +1531,11 @@ static HRESULT ParseRelatedMsiFromXml( | |||
| 1506 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMinVersion); | 1531 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMinVersion); |
| 1507 | ExitOnFailure(hr, "Failed to parse @MinVersion: %ls", scz); | 1532 | ExitOnFailure(hr, "Failed to parse @MinVersion: %ls", scz); |
| 1508 | 1533 | ||
| 1534 | if (pRelatedMsi->pMinVersion->fInvalid) | ||
| 1535 | { | ||
| 1536 | LogId(REPORT_WARNING, MSG_MANIFEST_INVALID_VERSION, scz); | ||
| 1537 | } | ||
| 1538 | |||
| 1509 | // flag that we have a min version | 1539 | // flag that we have a min version |
| 1510 | pRelatedMsi->fMinProvided = TRUE; | 1540 | pRelatedMsi->fMinProvided = TRUE; |
| 1511 | 1541 | ||
| @@ -1523,6 +1553,11 @@ static HRESULT ParseRelatedMsiFromXml( | |||
| 1523 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMaxVersion); | 1553 | hr = VerParseVersion(scz, 0, FALSE, &pRelatedMsi->pMaxVersion); |
| 1524 | ExitOnFailure(hr, "Failed to parse @MaxVersion: %ls", scz); | 1554 | ExitOnFailure(hr, "Failed to parse @MaxVersion: %ls", scz); |
| 1525 | 1555 | ||
| 1556 | if (pRelatedMsi->pMaxVersion->fInvalid) | ||
| 1557 | { | ||
| 1558 | LogId(REPORT_WARNING, MSG_MANIFEST_INVALID_VERSION, scz); | ||
| 1559 | } | ||
| 1560 | |||
| 1526 | // flag that we have a max version | 1561 | // flag that we have a max version |
| 1527 | pRelatedMsi->fMaxProvided = TRUE; | 1562 | pRelatedMsi->fMaxProvided = TRUE; |
| 1528 | 1563 | ||
