aboutsummaryrefslogtreecommitdiff
path: root/src/burn/engine/variant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/burn/engine/variant.cpp')
-rw-r--r--src/burn/engine/variant.cpp45
1 files changed, 26 insertions, 19 deletions
diff --git a/src/burn/engine/variant.cpp b/src/burn/engine/variant.cpp
index 2267ee7b..3fc02aa8 100644
--- a/src/burn/engine/variant.cpp
+++ b/src/burn/engine/variant.cpp
@@ -10,6 +10,9 @@ static HRESULT GetVersionInternal(
10 __in BOOL fSilent, 10 __in BOOL fSilent,
11 __out VERUTIL_VERSION** ppValue 11 __out VERUTIL_VERSION** ppValue
12 ); 12 );
13static void FreeVariantValue(
14 __in BURN_VARIANT* pVariant
15 );
13 16
14// function definitions 17// function definitions
15 18
@@ -17,12 +20,7 @@ extern "C" void BVariantUninitialize(
17 __in BURN_VARIANT* pVariant 20 __in BURN_VARIANT* pVariant
18 ) 21 )
19{ 22{
20 if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || 23 FreeVariantValue(pVariant);
21 BURN_VARIANT_TYPE_STRING == pVariant->Type)
22 {
23 StrSecureZeroFreeString(pVariant->sczValue);
24 }
25 SecureZeroMemory(pVariant, sizeof(BURN_VARIANT));
26} 24}
27 25
28extern "C" HRESULT BVariantGetNumeric( 26extern "C" HRESULT BVariantGetNumeric(
@@ -164,12 +162,8 @@ extern "C" HRESULT BVariantSetNumeric(
164{ 162{
165 HRESULT hr = S_OK; 163 HRESULT hr = S_OK;
166 164
167 if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || 165 FreeVariantValue(pVariant);
168 BURN_VARIANT_TYPE_STRING == pVariant->Type) 166
169 {
170 StrSecureZeroFreeString(pVariant->sczValue);
171 }
172 memset(pVariant, 0, sizeof(BURN_VARIANT));
173 pVariant->llValue = llValue; 167 pVariant->llValue = llValue;
174 pVariant->Type = BURN_VARIANT_TYPE_NUMERIC; 168 pVariant->Type = BURN_VARIANT_TYPE_NUMERIC;
175 169
@@ -194,7 +188,7 @@ extern "C" HRESULT BVariantSetString(
194 if (BURN_VARIANT_TYPE_FORMATTED != pVariant->Type && 188 if (BURN_VARIANT_TYPE_FORMATTED != pVariant->Type &&
195 BURN_VARIANT_TYPE_STRING != pVariant->Type) 189 BURN_VARIANT_TYPE_STRING != pVariant->Type)
196 { 190 {
197 memset(pVariant, 0, sizeof(BURN_VARIANT)); 191 FreeVariantValue(pVariant);
198 } 192 }
199 193
200 hr = StrAllocStringSecure(&pVariant->sczValue, wzValue, cchValue); 194 hr = StrAllocStringSecure(&pVariant->sczValue, wzValue, cchValue);
@@ -220,12 +214,8 @@ extern "C" HRESULT BVariantSetVersion(
220 } 214 }
221 else // assign the value. 215 else // assign the value.
222 { 216 {
223 if (BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || 217 FreeVariantValue(pVariant);
224 BURN_VARIANT_TYPE_STRING == pVariant->Type) 218
225 {
226 StrSecureZeroFreeString(pVariant->sczValue);
227 }
228 memset(pVariant, 0, sizeof(BURN_VARIANT));
229 hr = VerCopyVersion(pValue, &pVariant->pValue); 219 hr = VerCopyVersion(pValue, &pVariant->pValue);
230 pVariant->Type = BURN_VARIANT_TYPE_VERSION; 220 pVariant->Type = BURN_VARIANT_TYPE_VERSION;
231 } 221 }
@@ -319,3 +309,20 @@ extern "C" HRESULT BVariantChangeType(
319LExit: 309LExit:
320 return hr; 310 return hr;
321} 311}
312
313static void FreeVariantValue(
314 __in BURN_VARIANT* pVariant
315 )
316{
317 if ((BURN_VARIANT_TYPE_FORMATTED == pVariant->Type || BURN_VARIANT_TYPE_STRING == pVariant->Type) &&
318 pVariant->sczValue)
319 {
320 StrSecureZeroFreeString(pVariant->sczValue);
321 }
322 else if (BURN_VARIANT_TYPE_VERSION == pVariant->Type && pVariant->pValue)
323 {
324 VerFreeVersion(pVariant->pValue);
325 }
326
327 SecureZeroMemory(pVariant, sizeof(BURN_VARIANT));
328}