Skip to content

Commit 9097a58

Browse files
committed
Merge pull request kohsuke#34 from kllbzz/issue33
fix memory leak from issue kohsuke#33
2 parents 6d3150f + 263f8d4 commit 9097a58

File tree

5 files changed

+11
-8
lines changed

5 files changed

+11
-8
lines changed

native/com4j.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ JNIEXPORT jobject JNICALL Java_com4j_Native_invokeDispatch( JNIEnv* env, jclass
8282
error(env,__FILE__,__LINE__,hr,"Invocation failed: %s",(LPCSTR)_bstr_t(excepInfo.bstrDescription));
8383
}
8484

85-
delete p;
85+
delete[] p;
8686

8787
return retVal;
8888
}

native/eventReceiver.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ STDMETHODIMP CEventReceiver::Invoke( DISPID dispid, REFIID riid, LCID lcid, WORD
7272
VARIANT* pSrc = convertToVariant(pEnv,r);
7373
::VariantCopy(pResult,pSrc);
7474
::VariantClear(pSrc);
75+
delete pSrc;
7576
}
7677

7778
return S_OK;

native/typelib.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ CMethod::~CMethod() {
7979

8080
for( int i=0; i<m_nameCount; i++ )
8181
SysFreeString(m_pNames[i]);
82-
delete m_pNames;
82+
delete[] m_pNames;
8383
}
8484

8585

native/variant.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ class NoopVariantHandlerImpl : public VariantHandler {
133133
public:
134134
VARIANT* set( JNIEnv* env, jobject src ) {
135135
VARIANT* pv = new VARIANT();
136-
VariantClear(pv);
136+
VariantInit(pv);
137137
VariantCopy(pv, com4jVariantToVARIANT(env,src));
138138
return pv;
139139
}
@@ -148,7 +148,7 @@ class ComEnumHandlerImpl : public VariantHandler {
148148
public:
149149
VARIANT* set( JNIEnv* env, jobject src ) {
150150
VARIANT* pv = new VARIANT();
151-
VariantClear(pv);
151+
VariantInit(pv);
152152
pv->vt = VT_I4;
153153
pv->intVal = com4j_ComEnum_comEnumValue(env,src);
154154
return pv;
@@ -166,7 +166,7 @@ class DateHandlerImpl : public VariantHandler {
166166
VARIANT* set( JNIEnv* env, jobject src ) {
167167
jdouble d = com4j_Variant_fromDate(env,src);
168168
VARIANT* pv = new VARIANT();
169-
VariantClear(pv);
169+
VariantInit(pv);
170170
pv->vt = VT_DATE;
171171
pv->date = d;
172172
return pv;
@@ -182,7 +182,7 @@ class DecimalHandlerImpl : public VariantHandler {
182182
public:
183183
VARIANT* set( JNIEnv* env, jobject src ) {
184184
VARIANT* pv = new VARIANT();
185-
VariantClear(pv);
185+
VariantInit(pv);
186186
pv->vt = VT_DECIMAL;
187187

188188
jstring s = javaMathBigDecimal_toString(env,src);
@@ -264,7 +264,8 @@ VARIANT* convertToVariant( JNIEnv* env, jobject o ) {
264264
// consider a conversion to SAFEARRAY
265265
pair<SAFEARRAY*,VARTYPE> sa = safearray::SafeArrayXducer::toNative2(env,static_cast<jarray>(o));
266266
if(sa.first!=NULL) {
267-
_variant_t* v = new _variant_t();
267+
VARIANT* v = new VARIANT();
268+
VariantInit(v);
268269
v->vt = VT_ARRAY|sa.second;
269270
v->parray = sa.first;
270271
return v;

native/xducer2.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ namespace xducer {
1414
typedef jobject JavaType;
1515

1616
static inline NativeType toNative( JNIEnv* env, JavaType value ) {
17-
return *convertToVariant(env,value);
17+
std::auto_ptr<VARIANT> v(convertToVariant(env,value)); // need to be deleted after copy as return value
18+
return *v;
1819
}
1920

2021
static inline JavaType toJava( JNIEnv* env, NativeType value ) {

0 commit comments

Comments
 (0)