aboutsummaryrefslogtreecommitdiff
path: root/src/engine/variant.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-10-18 14:05:51 -0500
committerSean Hall <r.sean.hall@gmail.com>2020-10-24 20:07:21 -0500
commitbafc4f682a798eb375d32c1f4777664aceb1e15f (patch)
treecc9bcec75252a7e4025e6efc28f1918ac8361e62 /src/engine/variant.cpp
parent273c69f34311f4f4e5f6b5896e71d0788f12d96a (diff)
downloadwix-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.cpp46
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
9static HRESULT GetVersionInternal(
10 __in BURN_VARIANT* pVariant,
11 __in BOOL fHidden,
12 __in BOOL fSilent,
13 __out VERUTIL_VERSION** ppValue
14 );
9static HRESULT BVariantEncryptString( 15static 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.
143extern "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.
153extern "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
162static 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);