diff options
author | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-01-28 17:27:27 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-02-02 13:58:30 +0000 |
commit | 968110d27a7844362b15155aa353077bf27578a3 (patch) | |
tree | 093afc8249f2b2ef2f2cbf7d19027fa4dc12f78b | |
parent | 9b4843607b0240b943c5094d2a193569fb50de95 (diff) | |
download | qtactiveqt-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.cpp | 2 | ||||
-rw-r--r-- | src/activeqt/shared/qaxtypefunctions.cpp | 7 |
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: |