Merge remote-tracking branch 'origin/master' into YaSp
[scilab.git] / scilab / modules / hdf5 / src / cpp / listvar_in_hdf5_v1.cpp
index a332fb3..c239bad 100644 (file)
@@ -24,6 +24,7 @@ extern "C"
 #include "h5_fileManagement.h"
 #include "h5_readDataFromFile_v1.h"
 #include "expandPathVariable.h"
+#include "freeArrayOfString.h"
 }
 
 #include <vector>
@@ -75,6 +76,11 @@ int sci_listvar_in_hdf5_v1(char *fname, int* pvCtx)
 
     if (getAllocatedSingleString(pvCtx, piAddr, &pstFile))
     {
+        if (pstFile)
+        {
+            FREE(pstFile);
+        }
+
         Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 1);
         return 1;
     }
@@ -113,8 +119,7 @@ int sci_listvar_in_hdf5_v1(char *fname, int* pvCtx)
                 break;
             }
 
-            strcpy(pInfo[i].varName, pstVarNameList[i]);
-            FREE(pstVarNameList[i]);
+            strncpy(pInfo[i].varName, pstVarNameList[i], sizeof(pInfo[i].varName));
             b = read_data_v1(pvCtx, iDataSetId, 0, NULL, &pInfo[i]) == false;
             closeDataSet_v1(iDataSetId);
 
@@ -128,6 +133,8 @@ int sci_listvar_in_hdf5_v1(char *fname, int* pvCtx)
                 sciprint("%s\n", pInfo[i].pstInfo);
             }
         }
+
+        freeArrayOfString(pstVarNameList, iNbItem);
     }
     else
     {
@@ -155,6 +162,7 @@ int sci_listvar_in_hdf5_v1(char *fname, int* pvCtx)
     FREE(pstVarName);
     if (sciErr.iErr)
     {
+        FREE(pInfo);
         printError(&sciErr, 0);
         return 1;
     }
@@ -168,6 +176,7 @@ int sci_listvar_in_hdf5_v1(char *fname, int* pvCtx)
         sciErr = allocMatrixOfDouble(pvCtx, nbInputArgument(pvCtx) + 2, iNbItem, 1, &pdblType);
         if (sciErr.iErr)
         {
+            FREE(pInfo);
             printError(&sciErr, 0);
             return 1;
         }
@@ -319,9 +328,9 @@ static bool read_string_v1(int* pvCtx, int _iDatasetId, int _iItemPos, int *_piA
     _pInfo->piDims[1] = iCols;
 
     pstData = (char **)MALLOC(iRows * iCols * sizeof(char *));
+    memset(pstData, 0x00, iRows * iCols * sizeof(char *));
     iRet = readStringMatrix_v1(_iDatasetId, iRows, iCols, pstData);
 
-
     for (int i = 0 ; i < iRows * iCols ; i++)
     {
         _pInfo->iSize += (int)strlen(pstData[i]) * 4;