diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2020-07-31 17:06:35 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2020-08-09 10:33:49 -0600 |
| commit | d21eed76c48960707561c45c492c10a6a23c052e (patch) | |
| tree | ebab09d099a699a24801fcfb4d7152cf82cc4a06 /src/engine/variant.cpp | |
| parent | ad80d6dc10f9bd6cb6a084857a8fb546cc55e756 (diff) | |
| download | wix-d21eed76c48960707561c45c492c10a6a23c052e.tar.gz wix-d21eed76c48960707561c45c492c10a6a23c052e.tar.bz2 wix-d21eed76c48960707561c45c492c10a6a23c052e.zip | |
WIXFEAT:4763 Change "string" variable type to literal and add "formatted".
Diffstat (limited to 'src/engine/variant.cpp')
| -rw-r--r-- | src/engine/variant.cpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/engine/variant.cpp b/src/engine/variant.cpp index 5e9bd29a..43bc19c4 100644 --- a/src/engine/variant.cpp +++ b/src/engine/variant.cpp | |||
| @@ -32,7 +32,8 @@ extern "C" void BVariantUninitialize( | |||
| 32 | __in BURN_VARIANT* pVariant | 32 | __in BURN_VARIANT* pVariant |
| 33 | ) | 33 | ) |
| 34 | { | 34 | { |
| 35 | if (BURN_VARIANT_TYPE_STRING == pVariant->Type) | 35 | if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || |
| 36 | BURN_VARIANT_TYPE_STRING == pVariant->Type) | ||
| 36 | { | 37 | { |
| 37 | StrSecureZeroFreeString(pVariant->sczValue); | 38 | StrSecureZeroFreeString(pVariant->sczValue); |
| 38 | } | 39 | } |
| @@ -53,6 +54,7 @@ extern "C" HRESULT BVariantGetNumeric( | |||
| 53 | case BURN_VARIANT_TYPE_NUMERIC: | 54 | case BURN_VARIANT_TYPE_NUMERIC: |
| 54 | BVariantRetrieveNumeric(pVariant, pllValue); | 55 | BVariantRetrieveNumeric(pVariant, pllValue); |
| 55 | break; | 56 | break; |
| 57 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 56 | case BURN_VARIANT_TYPE_STRING: | 58 | case BURN_VARIANT_TYPE_STRING: |
| 57 | hr = BVariantRetrieveDecryptedString(pVariant, &sczValue); | 59 | hr = BVariantRetrieveDecryptedString(pVariant, &sczValue); |
| 58 | if (SUCCEEDED(hr)) | 60 | if (SUCCEEDED(hr)) |
| @@ -97,6 +99,7 @@ extern "C" HRESULT BVariantGetString( | |||
| 97 | } | 99 | } |
| 98 | SecureZeroMemory(&llValue, sizeof(llValue)); | 100 | SecureZeroMemory(&llValue, sizeof(llValue)); |
| 99 | break; | 101 | break; |
| 102 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 100 | case BURN_VARIANT_TYPE_STRING: | 103 | case BURN_VARIANT_TYPE_STRING: |
| 101 | hr = BVariantRetrieveDecryptedString(pVariant, psczValue); | 104 | hr = BVariantRetrieveDecryptedString(pVariant, psczValue); |
| 102 | break; | 105 | break; |
| @@ -136,6 +139,7 @@ extern "C" HRESULT BVariantGetVersion( | |||
| 136 | case BURN_VARIANT_TYPE_NUMERIC: | 139 | case BURN_VARIANT_TYPE_NUMERIC: |
| 137 | BVariantRetrieveNumeric(pVariant, (LONGLONG*)pqwValue); | 140 | BVariantRetrieveNumeric(pVariant, (LONGLONG*)pqwValue); |
| 138 | break; | 141 | break; |
| 142 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 139 | case BURN_VARIANT_TYPE_STRING: | 143 | case BURN_VARIANT_TYPE_STRING: |
| 140 | hr = BVariantRetrieveDecryptedString(pVariant, &sczValue); | 144 | hr = BVariantRetrieveDecryptedString(pVariant, &sczValue); |
| 141 | if (SUCCEEDED(hr)) | 145 | if (SUCCEEDED(hr)) |
| @@ -167,7 +171,8 @@ extern "C" HRESULT BVariantSetNumeric( | |||
| 167 | HRESULT hr = S_OK; | 171 | HRESULT hr = S_OK; |
| 168 | BOOL fEncrypt = pVariant->fEncryptString; | 172 | BOOL fEncrypt = pVariant->fEncryptString; |
| 169 | 173 | ||
| 170 | if (BURN_VARIANT_TYPE_STRING == pVariant->Type) | 174 | if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || |
| 175 | BURN_VARIANT_TYPE_STRING == pVariant->Type) | ||
| 171 | { | 176 | { |
| 172 | StrSecureZeroFreeString(pVariant->sczValue); | 177 | StrSecureZeroFreeString(pVariant->sczValue); |
| 173 | } | 178 | } |
| @@ -182,7 +187,8 @@ extern "C" HRESULT BVariantSetNumeric( | |||
| 182 | extern "C" HRESULT BVariantSetString( | 187 | extern "C" HRESULT BVariantSetString( |
| 183 | __in BURN_VARIANT* pVariant, | 188 | __in BURN_VARIANT* pVariant, |
| 184 | __in_z_opt LPCWSTR wzValue, | 189 | __in_z_opt LPCWSTR wzValue, |
| 185 | __in DWORD_PTR cchValue | 190 | __in DWORD_PTR cchValue, |
| 191 | __in BOOL fFormatted | ||
| 186 | ) | 192 | ) |
| 187 | { | 193 | { |
| 188 | HRESULT hr = S_OK; | 194 | HRESULT hr = S_OK; |
| @@ -194,7 +200,8 @@ extern "C" HRESULT BVariantSetString( | |||
| 194 | } | 200 | } |
| 195 | else // assign the value. | 201 | else // assign the value. |
| 196 | { | 202 | { |
| 197 | if (BURN_VARIANT_TYPE_STRING != pVariant->Type) | 203 | if (BURN_VARIANT_TYPE_FORMATTED != pVariant->Type && |
| 204 | BURN_VARIANT_TYPE_STRING != pVariant->Type) | ||
| 198 | { | 205 | { |
| 199 | memset(pVariant, 0, sizeof(BURN_VARIANT)); | 206 | memset(pVariant, 0, sizeof(BURN_VARIANT)); |
| 200 | } | 207 | } |
| @@ -207,7 +214,7 @@ extern "C" HRESULT BVariantSetString( | |||
| 207 | hr = StrAllocStringSecure(&pVariant->sczValue, wzValue, cchValue); | 214 | hr = StrAllocStringSecure(&pVariant->sczValue, wzValue, cchValue); |
| 208 | ExitOnFailure(hr, "Failed to copy string."); | 215 | ExitOnFailure(hr, "Failed to copy string."); |
| 209 | 216 | ||
| 210 | pVariant->Type = BURN_VARIANT_TYPE_STRING; | 217 | pVariant->Type = fFormatted ? BURN_VARIANT_TYPE_FORMATTED : BURN_VARIANT_TYPE_STRING; |
| 211 | } | 218 | } |
| 212 | 219 | ||
| 213 | LExit: | 220 | LExit: |
| @@ -223,7 +230,8 @@ extern "C" HRESULT BVariantSetVersion( | |||
| 223 | HRESULT hr = S_OK; | 230 | HRESULT hr = S_OK; |
| 224 | BOOL fEncryptValue = pVariant->fEncryptString; | 231 | BOOL fEncryptValue = pVariant->fEncryptString; |
| 225 | 232 | ||
| 226 | if (BURN_VARIANT_TYPE_STRING == pVariant->Type) | 233 | if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || |
| 234 | BURN_VARIANT_TYPE_STRING == pVariant->Type) | ||
| 227 | { | 235 | { |
| 228 | StrSecureZeroFreeString(pVariant->sczValue); | 236 | StrSecureZeroFreeString(pVariant->sczValue); |
| 229 | } | 237 | } |
| @@ -259,11 +267,12 @@ extern "C" HRESULT BVariantSetValue( | |||
| 259 | } | 267 | } |
| 260 | SecureZeroMemory(&llValue, sizeof(llValue)); | 268 | SecureZeroMemory(&llValue, sizeof(llValue)); |
| 261 | break; | 269 | break; |
| 270 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 262 | case BURN_VARIANT_TYPE_STRING: | 271 | case BURN_VARIANT_TYPE_STRING: |
| 263 | hr = BVariantGetString(pValue, &sczValue); | 272 | hr = BVariantGetString(pValue, &sczValue); |
| 264 | if (SUCCEEDED(hr)) | 273 | if (SUCCEEDED(hr)) |
| 265 | { | 274 | { |
| 266 | hr = BVariantSetString(pVariant, sczValue, 0); | 275 | hr = BVariantSetString(pVariant, sczValue, 0, BURN_VARIANT_TYPE_FORMATTED == pValue->Type); |
| 267 | } | 276 | } |
| 268 | StrSecureZeroFreeString(sczValue); | 277 | StrSecureZeroFreeString(sczValue); |
| 269 | break; | 278 | break; |
| @@ -310,11 +319,12 @@ extern "C" HRESULT BVariantCopy( | |||
| 310 | } | 319 | } |
| 311 | SecureZeroMemory(&llValue, sizeof(llValue)); | 320 | SecureZeroMemory(&llValue, sizeof(llValue)); |
| 312 | break; | 321 | break; |
| 322 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 313 | case BURN_VARIANT_TYPE_STRING: | 323 | case BURN_VARIANT_TYPE_STRING: |
| 314 | hr = BVariantGetString(pSource, &sczValue); | 324 | hr = BVariantGetString(pSource, &sczValue); |
| 315 | if (SUCCEEDED(hr)) | 325 | if (SUCCEEDED(hr)) |
| 316 | { | 326 | { |
| 317 | hr = BVariantSetString(pTarget, sczValue, 0); | 327 | hr = BVariantSetString(pTarget, sczValue, 0, BURN_VARIANT_TYPE_FORMATTED == pSource->Type); |
| 318 | } | 328 | } |
| 319 | StrSecureZeroFreeString(sczValue); | 329 | StrSecureZeroFreeString(sczValue); |
| 320 | break; | 330 | break; |
| @@ -350,6 +360,12 @@ extern "C" HRESULT BVariantChangeType( | |||
| 350 | { | 360 | { |
| 351 | ExitFunction(); // variant already is of the requested type | 361 | ExitFunction(); // variant already is of the requested type |
| 352 | } | 362 | } |
| 363 | else if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type && BURN_VARIANT_TYPE_STRING == type || | ||
| 364 | BURN_VARIANT_TYPE_STRING == pVariant->Type && BURN_VARIANT_TYPE_FORMATTED == type) | ||
| 365 | { | ||
| 366 | pVariant->Type = type; | ||
| 367 | ExitFunction(); | ||
| 368 | } | ||
| 353 | 369 | ||
| 354 | switch (type) | 370 | switch (type) |
| 355 | { | 371 | { |
| @@ -359,6 +375,7 @@ extern "C" HRESULT BVariantChangeType( | |||
| 359 | case BURN_VARIANT_TYPE_NUMERIC: | 375 | case BURN_VARIANT_TYPE_NUMERIC: |
| 360 | hr = BVariantGetNumeric(pVariant, &variant.llValue); | 376 | hr = BVariantGetNumeric(pVariant, &variant.llValue); |
| 361 | break; | 377 | break; |
| 378 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 362 | case BURN_VARIANT_TYPE_STRING: | 379 | case BURN_VARIANT_TYPE_STRING: |
| 363 | hr = BVariantGetString(pVariant, &variant.sczValue); | 380 | hr = BVariantGetString(pVariant, &variant.sczValue); |
| 364 | break; | 381 | break; |
| @@ -400,6 +417,7 @@ extern "C" HRESULT BVariantSetEncryption( | |||
| 400 | case BURN_VARIANT_TYPE_VERSION: | 417 | case BURN_VARIANT_TYPE_VERSION: |
| 401 | hr = S_OK; | 418 | hr = S_OK; |
| 402 | break; | 419 | break; |
| 420 | case BURN_VARIANT_TYPE_FORMATTED: __fallthrough; | ||
| 403 | case BURN_VARIANT_TYPE_STRING: | 421 | case BURN_VARIANT_TYPE_STRING: |
| 404 | hr = BVariantEncryptString(pVariant, fEncrypt); | 422 | hr = BVariantEncryptString(pVariant, fEncrypt); |
| 405 | break; | 423 | break; |
