diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2020-10-18 14:05:51 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2020-10-24 20:07:21 -0500 |
| commit | bafc4f682a798eb375d32c1f4777664aceb1e15f (patch) | |
| tree | cc9bcec75252a7e4025e6efc28f1918ac8361e62 /src/engine/variant.cpp | |
| parent | 273c69f34311f4f4e5f6b5896e71d0788f12d96a (diff) | |
| download | wix-bafc4f682a798eb375d32c1f4777664aceb1e15f.tar.gz wix-bafc4f682a798eb375d32c1f4777664aceb1e15f.tar.bz2 wix-bafc4f682a798eb375d32c1f4777664aceb1e15f.zip | |
Update string versioning.
Update condition parsing to allow specific characters for versions.
Log every time an invalid version is parsed.
Diffstat (limited to 'src/engine/variant.cpp')
| -rw-r--r-- | src/engine/variant.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/engine/variant.cpp b/src/engine/variant.cpp index 28578691..9fdb82cd 100644 --- a/src/engine/variant.cpp +++ b/src/engine/variant.cpp | |||
| @@ -6,6 +6,12 @@ | |||
| 6 | 6 | ||
| 7 | // internal function declarations | 7 | // internal function declarations |
| 8 | 8 | ||
| 9 | static HRESULT GetVersionInternal( | ||
| 10 | __in BURN_VARIANT* pVariant, | ||
| 11 | __in BOOL fHidden, | ||
| 12 | __in BOOL fSilent, | ||
| 13 | __out VERUTIL_VERSION** ppValue | ||
| 14 | ); | ||
| 9 | static HRESULT BVariantEncryptString( | 15 | static HRESULT BVariantEncryptString( |
| 10 | __in BURN_VARIANT* pVariant, | 16 | __in BURN_VARIANT* pVariant, |
| 11 | __in BOOL fEncrypt | 17 | __in BOOL fEncrypt |
| @@ -130,6 +136,36 @@ extern "C" HRESULT BVariantGetVersion( | |||
| 130 | __out VERUTIL_VERSION** ppValue | 136 | __out VERUTIL_VERSION** ppValue |
| 131 | ) | 137 | ) |
| 132 | { | 138 | { |
| 139 | return GetVersionInternal(pVariant, FALSE, FALSE, ppValue); | ||
| 140 | } | ||
| 141 | |||
| 142 | // The contents of ppValue may be sensitive, should keep encrypted and SecureZeroMemory. | ||
| 143 | extern "C" HRESULT BVariantGetVersionHidden( | ||
| 144 | __in BURN_VARIANT* pVariant, | ||
| 145 | __in BOOL fHidden, | ||
| 146 | __out VERUTIL_VERSION** ppValue | ||
| 147 | ) | ||
| 148 | { | ||
| 149 | return GetVersionInternal(pVariant, fHidden, FALSE, ppValue); | ||
| 150 | } | ||
| 151 | |||
| 152 | // The contents of ppValue may be sensitive, should keep encrypted and SecureZeroMemory. | ||
| 153 | extern "C" HRESULT BVariantGetVersionSilent( | ||
| 154 | __in BURN_VARIANT* pVariant, | ||
| 155 | __in BOOL fSilent, | ||
| 156 | __out VERUTIL_VERSION** ppValue | ||
| 157 | ) | ||
| 158 | { | ||
| 159 | return GetVersionInternal(pVariant, FALSE, fSilent, ppValue); | ||
| 160 | } | ||
| 161 | |||
| 162 | static HRESULT GetVersionInternal( | ||
| 163 | __in BURN_VARIANT* pVariant, | ||
| 164 | __in BOOL fHidden, | ||
| 165 | __in BOOL fSilent, | ||
| 166 | __out VERUTIL_VERSION** ppValue | ||
| 167 | ) | ||
| 168 | { | ||
| 133 | HRESULT hr = S_OK; | 169 | HRESULT hr = S_OK; |
| 134 | LONGLONG llValue = 0; | 170 | LONGLONG llValue = 0; |
| 135 | LPWSTR sczValue = NULL; | 171 | LPWSTR sczValue = NULL; |
| @@ -152,6 +188,10 @@ extern "C" HRESULT BVariantGetVersion( | |||
| 152 | { | 188 | { |
| 153 | hr = DISP_E_TYPEMISMATCH; | 189 | hr = DISP_E_TYPEMISMATCH; |
| 154 | } | 190 | } |
| 191 | else if (!fSilent && (*ppValue)->fInvalid) | ||
| 192 | { | ||
| 193 | LogId(REPORT_WARNING, MSG_INVALID_VERSION_COERSION, fHidden ? L"*****" : sczValue); | ||
| 194 | } | ||
| 155 | } | 195 | } |
| 156 | StrSecureZeroFreeString(sczValue); | 196 | StrSecureZeroFreeString(sczValue); |
| 157 | break; | 197 | break; |
| @@ -282,7 +322,7 @@ extern "C" HRESULT BVariantSetValue( | |||
| 282 | StrSecureZeroFreeString(sczValue); | 322 | StrSecureZeroFreeString(sczValue); |
| 283 | break; | 323 | break; |
| 284 | case BURN_VARIANT_TYPE_VERSION: | 324 | case BURN_VARIANT_TYPE_VERSION: |
| 285 | hr = BVariantGetVersion(pValue, &pVersionValue); | 325 | hr = BVariantGetVersionSilent(pValue, TRUE, &pVersionValue); |
| 286 | if (SUCCEEDED(hr)) | 326 | if (SUCCEEDED(hr)) |
| 287 | { | 327 | { |
| 288 | hr = BVariantSetVersion(pVariant, pVersionValue); | 328 | hr = BVariantSetVersion(pVariant, pVersionValue); |
| @@ -333,7 +373,7 @@ extern "C" HRESULT BVariantCopy( | |||
| 333 | StrSecureZeroFreeString(sczValue); | 373 | StrSecureZeroFreeString(sczValue); |
| 334 | break; | 374 | break; |
| 335 | case BURN_VARIANT_TYPE_VERSION: | 375 | case BURN_VARIANT_TYPE_VERSION: |
| 336 | hr = BVariantGetVersion(pSource, &pVersionValue); | 376 | hr = BVariantGetVersionSilent(pSource, TRUE, &pVersionValue); |
| 337 | if (SUCCEEDED(hr)) | 377 | if (SUCCEEDED(hr)) |
| 338 | { | 378 | { |
| 339 | hr = BVariantSetVersion(pTarget, pVersionValue); | 379 | hr = BVariantSetVersion(pTarget, pVersionValue); |
| @@ -383,7 +423,7 @@ extern "C" HRESULT BVariantChangeType( | |||
| 383 | hr = BVariantGetString(pVariant, &variant.sczValue); | 423 | hr = BVariantGetString(pVariant, &variant.sczValue); |
| 384 | break; | 424 | break; |
| 385 | case BURN_VARIANT_TYPE_VERSION: | 425 | case BURN_VARIANT_TYPE_VERSION: |
| 386 | hr = BVariantGetVersion(pVariant, &variant.pValue); | 426 | hr = BVariantGetVersionSilent(pVariant, TRUE, &variant.pValue); |
| 387 | break; | 427 | break; |
| 388 | default: | 428 | default: |
| 389 | ExitFunction1(hr = E_INVALIDARG); | 429 | ExitFunction1(hr = E_INVALIDARG); |
