scilab: fix memory leak

This commit is contained in:
Simon Marchetto 2015-03-24 17:22:37 +01:00
commit 64e5215f29

View file

@ -148,7 +148,8 @@ SWIGRUNTIME int
SWIG_Scilab_ConvertPacked(void *pvApiCtx, int iVar, void *ptr, int sz, swig_type_info *ty, char *fname) { SWIG_Scilab_ConvertPacked(void *pvApiCtx, int iVar, void *ptr, int sz, swig_type_info *ty, char *fname) {
swig_cast_info *tc; swig_cast_info *tc;
int *piAddrVar = NULL; int *piAddrVar = NULL;
char *pstStrings = NULL; char *pstString = NULL;
char *pstStringPtr = NULL;
SciErr sciErr; SciErr sciErr;
sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar); sciErr = getVarAddressFromPosition(pvApiCtx, iVar, &piAddrVar);
@ -157,27 +158,33 @@ SWIG_Scilab_ConvertPacked(void *pvApiCtx, int iVar, void *ptr, int sz, swig_type
return SWIG_ERROR; return SWIG_ERROR;
} }
if (getAllocatedSingleString(pvApiCtx, piAddrVar, &pstStrings)) { if (getAllocatedSingleString(pvApiCtx, piAddrVar, &pstString)) {
return SWIG_ERROR; return SWIG_ERROR;
} }
/* Pointer values must start with leading underscore */ /* Pointer values must start with leading underscore */
if (*pstStrings != '_') { if (*pstString != '_') {
freeAllocatedSingleString(pstString);
return SWIG_ERROR; return SWIG_ERROR;
} }
pstStrings++; pstStringPtr = pstString;
pstStrings = (char*)SWIG_UnpackData(pstStrings, ptr, sz); pstStringPtr++;
pstStringPtr = (char*)SWIG_UnpackData(pstStringPtr, ptr, sz);
if (ty) { if (ty) {
if (!pstStrings) { if (!pstStringPtr) {
freeAllocatedSingleString(pstString);
return SWIG_ERROR; return SWIG_ERROR;
} }
tc = SWIG_TypeCheck(pstStrings, ty); tc = SWIG_TypeCheck(pstStringPtr, ty);
if (!tc) { if (!tc) {
freeAllocatedSingleString(pstString);
return SWIG_ERROR; return SWIG_ERROR;
} }
} }
freeAllocatedSingleString(pstString);
return SWIG_OK; return SWIG_OK;
} }