From afd596610af712969f2d626693794c68a7198bf3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20DAVID?= Date: Fri, 28 Aug 2015 15:45:24 +0200 Subject: [PATCH] commons: always free returned C-style strings Change-Id: If7960720a3110baadd11efdb9064f6203d79f703 --- scilab/modules/commons/src/jni/ScilabCommons.i | 6 ++++ .../modules/commons/src/jni/ScilabCommons_wrap.c | 37 ++++++++++++++++---- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/scilab/modules/commons/src/jni/ScilabCommons.i b/scilab/modules/commons/src/jni/ScilabCommons.i index b1f484e..4dc82d4 100644 --- a/scilab/modules/commons/src/jni/ScilabCommons.i +++ b/scilab/modules/commons/src/jni/ScilabCommons.i @@ -18,6 +18,7 @@ */ %module ScilabCommons %{ +#include "sci_malloc.h" #include "sci_home.h" #include "sci_tmpdir.h" #include "createtempfilename.h" @@ -69,6 +70,11 @@ public class%} } %} +%typemap(out, noblock=1) char * {if ($1) +{ + $result = JCALL1(NewStringUTF, jenv, (const char *)$1); + FREE($1); +}} /* JavaDoc for ScilabCommons class */ %pragma(java) moduleclassmodifiers=" diff --git a/scilab/modules/commons/src/jni/ScilabCommons_wrap.c b/scilab/modules/commons/src/jni/ScilabCommons_wrap.c index 71048b8..de22fad 100644 --- a/scilab/modules/commons/src/jni/ScilabCommons_wrap.c +++ b/scilab/modules/commons/src/jni/ScilabCommons_wrap.c @@ -200,6 +200,7 @@ static void SWIGUNUSED SWIG_JavaThrowException(JNIEnv *jenv, SWIG_JavaExceptionC #define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_JavaThrowException(jenv, SWIG_JavaIllegalArgumentException, msg); return nullreturn; } else +#include "sci_malloc.h" #include "sci_home.h" #include "sci_tmpdir.h" #include "createtempfilename.h" @@ -220,7 +221,11 @@ SWIGEXPORT jstring JNICALL Java_org_scilab_modules_commons_ScilabCommonsJNI_getS (void)jenv; (void)jcls; result = (char *)getSCIHOME(); - if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + if (result) + { + jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + FREE(result); + } return jresult; } @@ -232,7 +237,11 @@ SWIGEXPORT jstring JNICALL Java_org_scilab_modules_commons_ScilabCommonsJNI_getT (void)jenv; (void)jcls; result = (char *)getTMPDIR(); - if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + if (result) + { + jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + FREE(result); + } return jresult; } @@ -244,7 +253,11 @@ SWIGEXPORT jstring JNICALL Java_org_scilab_modules_commons_ScilabCommonsJNI_getl (void)jenv; (void)jcls; result = (char *)getlanguage(); - if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + if (result) + { + jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + FREE(result); + } return jresult; } @@ -264,7 +277,11 @@ SWIGEXPORT jstring JNICALL Java_org_scilab_modules_commons_ScilabCommonsJNI_crea } arg2 = (int)jarg2; result = (char *)createtempfilename((char const *)arg1,arg2); - if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + if (result) + { + jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + FREE(result); + } if (arg1) (*jenv)->ReleaseStringUTFChars(jenv, jarg1, (const char *)arg1); return jresult; } @@ -316,7 +333,11 @@ SWIGEXPORT jstring JNICALL Java_org_scilab_modules_commons_ScilabCommonsJNI_getf (void)jenv; (void)jcls; result = (char *)getformat(); - if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + if (result) + { + jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + FREE(result); + } return jresult; } @@ -388,7 +409,11 @@ SWIGEXPORT jstring JNICALL Java_org_scilab_modules_commons_ScilabCommonsJNI_getS (void)jenv; (void)jcls; result = (char *)getScilabVersionAsString(); - if (result) jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + if (result) + { + jresult = (*jenv)->NewStringUTF(jenv, (const char *)result); + FREE(result); + } return jresult; } -- 1.7.9.5