aboutsummaryrefslogtreecommitdiff
path: root/src/engine/variant.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-10-18 16:01:24 -0500
committerSean Hall <r.sean.hall@gmail.com>2020-10-24 20:07:21 -0500
commita0c40d5a1b8537a6338dacc27a88d236077ab785 (patch)
tree1dd1fed3eebe2d909f7dc10de94dd92b180f3c2f /src/engine/variant.cpp
parent60717700e175d38412559113c8a5388c954c7c91 (diff)
downloadwix-a0c40d5a1b8537a6338dacc27a88d236077ab785.tar.gz
wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.tar.bz2
wix-a0c40d5a1b8537a6338dacc27a88d236077ab785.zip
Allow unsetting version variables.
Diffstat (limited to 'src/engine/variant.cpp')
-rw-r--r--src/engine/variant.cpp29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/engine/variant.cpp b/src/engine/variant.cpp
index 9fdb82cd..82f465b2 100644
--- a/src/engine/variant.cpp
+++ b/src/engine/variant.cpp
@@ -198,7 +198,14 @@ static HRESULT GetVersionInternal(
198 case BURN_VARIANT_TYPE_VERSION: 198 case BURN_VARIANT_TYPE_VERSION:
199 BVariantRetrieveVersion(pVariant, &pValue); 199 BVariantRetrieveVersion(pVariant, &pValue);
200 200
201 hr = VerCopyVersion(pValue, ppValue); 201 if (!pValue)
202 {
203 *ppValue = NULL;
204 }
205 else
206 {
207 hr = VerCopyVersion(pValue, ppValue);
208 }
202 break; 209 break;
203 default: 210 default:
204 hr = E_INVALIDARG; 211 hr = E_INVALIDARG;
@@ -275,14 +282,22 @@ extern "C" HRESULT BVariantSetVersion(
275 HRESULT hr = S_OK; 282 HRESULT hr = S_OK;
276 BOOL fEncryptValue = pVariant->fEncryptString; 283 BOOL fEncryptValue = pVariant->fEncryptString;
277 284
278 if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || 285 if (!pValue) // if we're nulling out the version, make the variable NONE.
279 BURN_VARIANT_TYPE_STRING == pVariant->Type)
280 { 286 {
281 StrSecureZeroFreeString(pVariant->sczValue); 287 BVariantUninitialize(pVariant);
282 } 288 }
283 memset(pVariant, 0, sizeof(BURN_VARIANT)); 289 else // assign the value.
284 hr = VerCopyVersion(pValue, &pVariant->pValue); 290 {
285 pVariant->Type = BURN_VARIANT_TYPE_VERSION; 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
286 BVariantSetEncryption(pVariant, fEncryptValue); 301 BVariantSetEncryption(pVariant, fEncryptValue);
287 302
288 return hr; 303 return hr;