* Bug #13291 fixed - xmltojar([],[],'ja_JP') might SIGSEGV 09/14409/4
Clément DAVID [Mon, 14 Apr 2014 08:25:57 +0000 (10:25 +0200)]
To reproduce: "make doc-ja_JP" on a build using libasan
9b514623e1 introduced the issue, fix coverity the right way :

** CID 1154247:  Resource leak  (RESOURCE_LEAK)
    /modules/string/sci_gateway/c/sci_convstr.c: 117 in sci_convstr()

Change-Id: Ia6829628974e24f85eaa4f53af918e9ab3c82f1c

scilab/CHANGES_5.5.X
scilab/modules/api_scilab/src/cpp/api_string.cpp
scilab/modules/string/sci_gateway/c/sci_convstr.c

index 47de1e0..69b301c 100644 (file)
@@ -1,6 +1,12 @@
                      Changes between version 5.5.0 and 5.5.1
                      =======================================
 
+Scilab Bug Fixes
+================
+
+* Bug #13291 fixed - xmltojar([],[],'ja_JP') might lead to a crash when the
+                     locale was not available system-wide.
+
 
 
                      Changes between version 5.4.1 and 5.5.0
index 884d82f..9ca9057 100644 (file)
@@ -673,6 +673,11 @@ int getAllocatedMatrixOfWideString(void* _pvCtx, int* _piAddress, int* _piRows,
             FREE(piLen);
             piLen = NULL;
         }
+        if (*_pwstData)
+        {
+            FREE(*_pwstData);
+            *_pwstData = NULL;
+        }
         printError(&sciErr, 0);
         return sciErr.iErr;
     }
@@ -886,7 +891,6 @@ int allocSingleString(void* _pvCtx, int _iVar, int _iLen, const char** _pstStrin
     SciErr sciErr = sciErrInit();
     int iNewPos     = Top - Rhs + _iVar;
     int iAddr       = *Lstk(iNewPos);
-    int iTotalLen   = 0;
     int* piAddr     = NULL;
     int* piOffset   = NULL;
     char* pstString = NULL;
index c966361..e7a85de 100644 (file)
@@ -113,7 +113,6 @@ int sci_convstr(char *fname, unsigned long fname_len)
     /* To input the string matrix */
     if (getAllocatedMatrixOfWideString(pvApiCtx, piAddr1, &iRows1, &iCols1, &pstInput))
     {
-        freeAllocatedMatrixOfWideString(iRows1, iCols1, pstInput);
         Scierror(999, _("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"), fname, 1);
         return 0;
     }