@joebigelow / wix-1 / commits / a0c40d5a

Allow unsetting version variables.

Sean Hall committed Oct 18, 2020 at 16:01 UTC a0c40d5a1b8537a6338dacc27a88d236077ab785
4 files changed +43 -15
src/engine/EngineForApplication.cpp
+5 -2
@@ -583,8 +583,11 @@ static HRESULT BAEngineSetVariableVersion(
583
584 if (wzVariable && *wzVariable)
585 {
586 - hr = VerParseVersion(wzValue, 0, FALSE, &pVersion);
587 - ExitOnFailure(hr, "Failed to parse new version value.");
586 + if (wzValue)
587 + {
588 + hr = VerParseVersion(wzValue, 0, FALSE, &pVersion);
589 + ExitOnFailure(hr, "Failed to parse new version value.");
590 + }
591
592 hr = VariableSetVersion(&pContext->pEngineState->variables, wzVariable, pVersion, FALSE);
593 ExitOnFailure(hr, "Failed to set version variable.");
src/engine/EngineForExtension.cpp
+5 -2
@@ -273,8 +273,11 @@ static HRESULT BEEngineSetVariableVersion(
273
274 if (wzVariable && *wzVariable)
275 {
276 - hr = VerParseVersion(wzValue, 0, FALSE, &pVersion);
277 - ExitOnFailure(hr, "Failed to parse new version value.");
276 + if (wzValue)
277 + {
278 + hr = VerParseVersion(wzValue, 0, FALSE, &pVersion);
279 + ExitOnFailure(hr, "Failed to parse new version value.");
280 + }
281
282 hr = VariableSetVersion(&pContext->pEngineState->variables, wzVariable, pVersion, FALSE);
283 ExitOnFailure(hr, "Failed to set version variable.");
src/engine/variable.cpp
+11 -4
@@ -1551,7 +1551,7 @@ static HRESULT SetVariableValue(
1551 case BURN_VARIANT_TYPE_NONE:
1552 if (BURN_VARIANT_TYPE_NONE != pVariables->rgVariables[iVariable].Value.Type)
1553 {
1554 - LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable, pVariant->sczValue);
1554 + LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable);
1555 }
1556 break;
1557
@@ -1563,7 +1563,7 @@ static HRESULT SetVariableValue(
1563 case BURN_VARIANT_TYPE_STRING:
1564 if (!pVariant->sczValue)
1565 {
1566 - LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable, pVariant->sczValue);
1566 + LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable);
1567 }
1568 else
1569 {
@@ -1572,7 +1572,14 @@ static HRESULT SetVariableValue(
1572 break;
1573
1574 case BURN_VARIANT_TYPE_VERSION:
1575 - LogStringLine(REPORT_STANDARD, "Setting version variable '%ls' to value '%ls'", wzVariable, pVariant->pValue->sczVersion);
1575 + if (!pVariant->pValue)
1576 + {
1577 + LogStringLine(REPORT_STANDARD, "Unsetting variable '%ls'", wzVariable);
1578 + }
1579 + else
1580 + {
1581 + LogStringLine(REPORT_STANDARD, "Setting version variable '%ls' to value '%ls'", wzVariable, pVariant->pValue->sczVersion);
1582 + }
1583 break;
1584
1585 default:
@@ -1581,7 +1588,7 @@ static HRESULT SetVariableValue(
1588 }
1589 }
1590
1584 - if (BURN_VARIANT_TYPE_VERSION == pVariant->Type && pVariant->pValue->fInvalid)
1591 + if (BURN_VARIANT_TYPE_VERSION == pVariant->Type && pVariant->pValue && pVariant->pValue->fInvalid)
1592 {
1593 LogId(REPORT_WARNING, MSG_VARIABLE_INVALID_VERSION, wzVariable);
1594 }
src/engine/variant.cpp
+22 -7
@@ -198,7 +198,14 @@ static HRESULT GetVersionInternal(
198 case BURN_VARIANT_TYPE_VERSION:
199 BVariantRetrieveVersion(pVariant, &pValue);
200
201 - hr = VerCopyVersion(pValue, ppValue);
201 + if (!pValue)
202 + {
203 + *ppValue = NULL;
204 + }
205 + else
206 + {
207 + hr = VerCopyVersion(pValue, ppValue);
208 + }
209 break;
210 default:
211 hr = E_INVALIDARG;
@@ -275,14 +282,22 @@ extern "C" HRESULT BVariantSetVersion(
282 HRESULT hr = S_OK;
283 BOOL fEncryptValue = pVariant->fEncryptString;
284
278 - if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type ||
279 - BURN_VARIANT_TYPE_STRING == pVariant->Type)
285 + if (!pValue) // if we're nulling out the version, make the variable NONE.
286 {
281 - StrSecureZeroFreeString(pVariant->sczValue);
287 + BVariantUninitialize(pVariant);
288 }
283 - memset(pVariant, 0, sizeof(BURN_VARIANT));
284 - hr = VerCopyVersion(pValue, &pVariant->pValue);
285 - pVariant->Type = BURN_VARIANT_TYPE_VERSION;
289 + else // assign the value.
290 + {
291 + if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type ||
292 + BURN_VARIANT_TYPE_STRING == pVariant->Type)
293 + {
294 + StrSecureZeroFreeString(pVariant->sczValue);
295 + }
296 + memset(pVariant, 0, sizeof(BURN_VARIANT));
297 + hr = VerCopyVersion(pValue, &pVariant->pValue);
298 + pVariant->Type = BURN_VARIANT_TYPE_VERSION;
299 + }
300 +
301 BVariantSetEncryption(pVariant, fEncryptValue);
302
303 return hr;