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; |
