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