Fix memory bugs 39/12739/3
Calixte DENIZET [Mon, 30 Sep 2013 08:12:19 +0000 (10:12 +0200)]
Change-Id: I336e148765ca76fb521be697aec0c7f256a504ab

scilab/modules/fftw/sci_gateway/c/sci_fftw_flags.c
scilab/modules/hdf5/src/cpp/H5CompoundData.cpp
scilab/modules/hdf5/src/cpp/H5ExternalLink.cpp
scilab/modules/hdf5/src/cpp/H5HardLink.cpp
scilab/modules/hdf5/src/cpp/H5Object.cpp
scilab/modules/hdf5/src/cpp/H5SoftLink.cpp
scilab/modules/hdf5/src/cpp/import_from_hdf5_v1.cpp
scilab/modules/hdf5/src/cpp/listvar_in_hdf5_v1.cpp
scilab/modules/localization/sci_gateway/c/sci_addlocalizationdomain.c
scilab/modules/xml/sci_gateway/cpp/sci_xmlIsValidObject.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlXPath.cpp

index e1243bf..b839067 100644 (file)
@@ -331,9 +331,9 @@ int sci_fftw_flags(char *fname, unsigned long fname_len)
     /* Create the string matrix as return of the function */
     sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 3, j, 1, Str3);
     freeArrayOfString(Str3, j); // Data have been copied into Scilab memory
+
     if (sciErr.iErr)
     {
-        freeArrayOfString(Str3, j); // Make sure everything is cleanup in case of error
         printError(&sciErr, 0);
         return 1;
     }
index 2a4e45a..951f597 100644 (file)
@@ -46,6 +46,7 @@ H5CompoundData::~H5CompoundData()
 {
     infos->erase(infos->begin(), infos->end());
     delete infos;
+    delete[] fieldinfos;
     delete[] cumprod;
     H5Tclose(type);
 }
index 0a5017c..e8642e7 100644 (file)
@@ -69,7 +69,8 @@ void H5ExternalLink::getAccessibleAttribute(const std::string & _name, const int
 
     if (lower == "type")
     {
-        const char * _type = getLinkType().c_str();
+        const std::string linkType = getLinkType();
+        const char * _type = linkType.c_str();
         err = createMatrixOfString(pvApiCtx, pos, 1, 1, &_type);
         if (err.iErr)
         {
index 2d0d4d5..b31fc22 100644 (file)
@@ -58,7 +58,8 @@ void H5HardLink::getAccessibleAttribute(const std::string & _name, const int pos
 
     if (lower == "type")
     {
-        const char * _type = getLinkType().c_str();
+       const std::string linkType = getLinkType();
+        const char * _type = linkType.c_str();
         err = createMatrixOfString(pvApiCtx, pos, 1, 1, &_type);
         if (err.iErr)
         {
index 061f10e..3cf1ef6 100644 (file)
@@ -114,8 +114,9 @@ void H5Object::getAccessibleAttribute(const std::string & _name, const int pos,
 
     if (lower == "name")
     {
-        const char * name = getName().c_str();
-        err = createMatrixOfString(pvApiCtx, pos, 1, 1, &name);
+       const std::string name = getName();
+        const char * _name = name.c_str();
+        err = createMatrixOfString(pvApiCtx, pos, 1, 1, &_name);
         if (err.iErr)
         {
             throw H5Exception(__LINE__, __FILE__, _("Cannot create a string on the stack."));
@@ -125,7 +126,8 @@ void H5Object::getAccessibleAttribute(const std::string & _name, const int pos,
     }
     else if (lower == "path")
     {
-        const char * path = getCompletePath().c_str();
+       const std::string completePath = getCompletePath();
+        const char * path = completePath.c_str();
         err = createMatrixOfString(pvApiCtx, pos, 1, 1, &path);
         if (err.iErr)
         {
index 1be57ec..50c8714 100644 (file)
@@ -54,7 +54,8 @@ void H5SoftLink::getAccessibleAttribute(const std::string & _name, const int pos
 
     if (lower == "type")
     {
-        const char * _type = getLinkType().c_str();
+       const std::string linkType = getLinkType();
+        const char * _type = linkType.c_str();
         err = createMatrixOfString(pvApiCtx, pos, 1, 1, &_type);
         if (err.iErr)
         {
@@ -65,7 +66,8 @@ void H5SoftLink::getAccessibleAttribute(const std::string & _name, const int pos
     }
     else if (lower == "target")
     {
-        const char * _target = getLinkValue().c_str();
+       const std::string linkValue = getLinkValue();
+        const char * _target = linkValue.c_str();
         err = createMatrixOfString(pvApiCtx, pos, 1, 1, &_target);
         if (err.iErr)
         {
index 5b0320c..93af618 100644 (file)
@@ -84,8 +84,8 @@ int sci_import_from_hdf5_v1(char *fname, unsigned long fname_len)
     if (iFile < 0)
     {
         FREE(pstExpandedFilename);
-        FREE(pstFilename);
         Scierror(999, _("%s: Unable to open file: %s\n"), fname, pstFilename);
+        FREE(pstFilename);
         return 1;
     }
 
index 33d0e19..6658877 100644 (file)
@@ -84,8 +84,8 @@ int sci_listvar_in_hdf5_v1(char *fname, unsigned long fname_len)
     if (iFile < 0)
     {
         FREE(pstFileName);
-        FREE(pstFile);
         Scierror(999, _("%s: Unable to open file: %s\n"), fname, pstFile);
+        FREE(pstFile);
         return 1;
     }
     FREE(pstFileName);
index d637407..b9f2951 100644 (file)
@@ -88,23 +88,26 @@ int sci_addlocalizationdomain(char *fname, unsigned long fname_len)
     expandedPath = expandPathVariable(pstPath);
     pstRet = bindtextdomain(pstDomain, expandedPath);
 
-    freeAllocatedSingleString(pstDomain);
     freeAllocatedSingleString(pstPath);
     FREE(expandedPath);
 
     if (pstRet == NULL)
     {
         Scierror(999, _("%s: Unable to add new domain %s.\n"), fname, pstDomain);
+       freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
     if (createScalarBoolean(pvApiCtx, iRhs + 1, 1))
     {
         Scierror(999, _("%s: Unable to add new domain %s.\n"), fname, pstDomain);
+       freeAllocatedSingleString(pstDomain);
         return 0;
     }
 
+    freeAllocatedSingleString(pstDomain);
+
     AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
     ReturnArguments(pvApiCtx);
     return 0;
-}
\ No newline at end of file
+}
index 994127b..1d96aa2 100644 (file)
@@ -66,10 +66,10 @@ int sci_xmlIsValidObject(char *fname, unsigned long fname_len)
 
             if (err.iErr)
             {
-                delete[]exists;
-                freeAllocatedMatrixOfString(row, col, vars);
+                delete[] exists;
                 printError(&err, 0);
                 Scierror(999, _("%s: Can not read named argument %s.\n"), fname, const_cast < const char *>(vars[i]));
+                freeAllocatedMatrixOfString(row, col, vars);
 
                 return 0;
             }
index a55d1fa..57ec349 100644 (file)
@@ -198,8 +198,8 @@ int sci_xmlXPath(char *fname, unsigned long fname_len)
         break;
     }
     default:
-        delete xpath;
         Scierror(999, gettext("%s: XPath query returned a not handled type: %i\n"), fname, xpath->getResultType());
+        delete xpath;
         return 0;
     }