summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-01-28 17:27:27 +0100
committerFriedemann Kleint <Friedemann.Kleint@theqtcompany.com>2015-02-02 13:58:30 +0000
commit968110d27a7844362b15155aa353077bf27578a3 (patch)
tree093afc8249f2b2ef2f2cbf7d19027fa4dc12f78b
parent9b4843607b0240b943c5094d2a193569fb50de95 (diff)
downloadqtactiveqt-968110d27a7844362b15155aa353077bf27578a3.tar.gz
Clean up code dealing with VARIANT.
Initialize arguments before the function call and add checks for IDispatch ** type variants to clearVARIANT(). Task-number: QTBUG-44048 Change-Id: Idceab05852bca8b0cb7e60672e392ee08a3be594 Reviewed-by: Andy Shaw <andy.shaw@digia.com>
-rw-r--r--src/activeqt/container/qaxbase.cpp2
-rw-r--r--src/activeqt/shared/qaxtypefunctions.cpp7
2 files changed, 7 insertions, 2 deletions
diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp
index 803f3a4..f97a469 100644
--- a/src/activeqt/container/qaxbase.cpp
+++ b/src/activeqt/container/qaxbase.cpp
@@ -3663,6 +3663,8 @@ int QAxBase::internalInvoke(QMetaObject::Call call, int index, void **v)
else
params.rgvarg = new VARIANTARG[params.cArgs];
}
+ for (VARIANTARG *vp = params.rgvarg, *vEnd = params.rgvarg + params.cArgs; vp < vEnd; ++vp)
+ VariantInit(vp);
int p;
for (p = 0; p < (int)params.cArgs; ++p) {
diff --git a/src/activeqt/shared/qaxtypefunctions.cpp b/src/activeqt/shared/qaxtypefunctions.cpp
index 1b6ab24..e426a75 100644
--- a/src/activeqt/shared/qaxtypefunctions.cpp
+++ b/src/activeqt/shared/qaxtypefunctions.cpp
@@ -207,8 +207,11 @@ void clearVARIANT(VARIANT *var)
delete var->pdate;
break;
case VT_DISPATCH|VT_BYREF:
- (*var->ppdispVal)->Release();
- delete var->ppdispVal;
+ if (var->ppdispVal) {
+ if (*var->ppdispVal)
+ (*var->ppdispVal)->Release();
+ delete var->ppdispVal;
+ }
break;
case VT_ARRAY|VT_VARIANT|VT_BYREF:
case VT_ARRAY|VT_UI1|VT_BYREF: