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;