diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2020-10-18 16:01:24 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2020-10-24 20:07:21 -0500 |
commit | a0c40d5a1b8537a6338dacc27a88d236077ab785 (patch) | |
tree | 1dd1fed3eebe2d909f7dc10de94dd92b180f3c2f /src/engine/variant.cpp | |
parent | 60717700e175d38412559113c8a5388c954c7c91 (diff) | |
download | wix-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.cpp | 29 |
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; |