Coverity: Graphics Module Resource Leaks fixed 78/18178/6
Dhruv Khattar [Mon, 23 May 2016 20:30:06 +0000 (01:30 +0530)]
Change-Id: Ia70a0c7b755495a85b0b7c31ebe94245dd1aa848

26 files changed:
scilab/modules/graphics/includes/BasicAlgos.h
scilab/modules/graphics/sci_gateway/c/sci_Legend.c
scilab/modules/graphics/sci_gateway/c/sci_delete.c
scilab/modules/graphics/sci_gateway/c/sci_drawaxis.c
scilab/modules/graphics/sci_gateway/c/sci_move.c
scilab/modules/graphics/sci_gateway/c/sci_set.c
scilab/modules/graphics/sci_gateway/c/sci_xchange.c
scilab/modules/graphics/sci_gateway/c/sci_xclick.c
scilab/modules/graphics/sci_gateway/c/sci_xlfont.c
scilab/modules/graphics/sci_gateway/c/sci_xpoly.c
scilab/modules/graphics/sci_gateway/c/sci_xstring.c
scilab/modules/graphics/sci_gateway/c/sci_xstringb.c
scilab/modules/graphics/sci_gateway/c/sci_xtitle.c
scilab/modules/graphics/sci_gateway/cpp/sci_get.cpp
scilab/modules/graphics/sci_gateway/cpp/sci_matplot.cpp
scilab/modules/graphics/src/c/BasicAlgos.c
scilab/modules/graphics/src/c/GetCommandArg.c
scilab/modules/graphics/src/c/InitObjects.c
scilab/modules/graphics/src/c/getHandleProperty/CheckTicksProperty.c
scilab/modules/graphics/src/c/getHandleProperty/getPropertyAssignedValue.c
scilab/modules/graphics/src/c/getHandleProperty/set_border_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_constraints_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_layout_options_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_x_ticks_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_y_ticks_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_z_ticks_property.c

index bc97bc7..9eb3b11 100644 (file)
@@ -63,7 +63,7 @@ GRAPHICS_IMPEXP void intArrayCopy(int dest[], const int src[], int nbElement);
 /**
  * copy a char * array into an other
  */
-GRAPHICS_IMPEXP void stringArrayCopy(char * dest[], char * src[], int nbElement);
+GRAPHICS_IMPEXP BOOL stringArrayCopy(char * dest[], char * src[], int nbElement);
 
 /**
  * set each element of an array to a certain value
index 015f865..5cf02e8 100644 (file)
@@ -110,7 +110,6 @@ int sci_Legend(char * fname, void *pvApiCtx)
     // Retrieve a matrix of string at position 2.
     if (getAllocatedMatrixOfString(pvApiCtx, piAddrStr, &m2, &n2, &Str))
     {
-        freeAllocatedMatrixOfString(m2, n2, Str);
         Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 2);
         return 1;
     }
@@ -121,25 +120,25 @@ int sci_Legend(char * fname, void *pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeAllocatedMatrixOfString(m2, n2, Str);
             return 1;
         }
 
         // Retrieve a matrix of double at position 3.
         if (getAllocatedSingleString(pvApiCtx, piAddrl2, &l2))
         {
-            freeAllocatedMatrixOfString(m2, n2, Str);
-            freeAllocatedSingleString(l2);
             Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 3);
+            freeAllocatedMatrixOfString(m2, n2, Str);
             return 1;
         }
 
         location = propertyNameToLegendPlace((l2));
+        freeAllocatedSingleString(l2);
 
         if (location == SCI_LEGEND_POSITION_UNSPECIFIED)
         {
-            freeAllocatedMatrixOfString(m2, n2, Str);
-            freeAllocatedSingleString(l2);
             Scierror(999, _("%s: Wrong value for input argument #%d: Incorrect value.\n"), fname, 3);
+            freeAllocatedMatrixOfString(m2, n2, Str);
             return 1;
         }
     }
@@ -151,8 +150,8 @@ int sci_Legend(char * fname, void *pvApiCtx)
     tabofhandles = (int*)MALLOC(n * sizeof(int));
     if (tabofhandles == NULL)
     {
-        freeAllocatedMatrixOfString(m2, n2, Str);
         Scierror(999, _("%s: No more memory.\n"), fname);
+        freeAllocatedMatrixOfString(m2, n2, Str);
         return 1;
     }
 
@@ -166,9 +165,9 @@ int sci_Legend(char * fname, void *pvApiCtx)
 
         if (iObjUID == 0)
         {
+            Scierror(999, _("%s: The handle is no more valid.\n"), fname);
             freeAllocatedMatrixOfString(m2, n2, Str);
             FREE(tabofhandles);
-            Scierror(999, _("%s: The handle is no more valid.\n"), fname);
             return 1;
         }
 
@@ -188,8 +187,8 @@ int sci_Legend(char * fname, void *pvApiCtx)
 
         if (iObj != iSubwinUID)
         {
-            freeAllocatedMatrixOfString(m2, n2, Str);
             Scierror(999, _("%s: Objects must have the same axes.\n"), fname);
+            freeAllocatedMatrixOfString(m2, n2, Str);
             FREE(tabofhandles);
             return 1;
         }
@@ -198,9 +197,9 @@ int sci_Legend(char * fname, void *pvApiCtx)
 
         if (type != __GO_POLYLINE__)
         {
+            Scierror(999, _("%s: The %d th handle is not a polyline handle.\n"), fname, i + 1);
             freeAllocatedMatrixOfString(m2, n2, Str);
             FREE(tabofhandles);
-            Scierror(999, _("%s: The %d th handle is not a polyline handle.\n"), fname, i + 1);
             return 1;
         }
 
index 864a2a8..8f26cc0 100644 (file)
@@ -172,6 +172,7 @@ int sci_delete(char *fname, void* pvApiCtx)
                 {
                     int i = 0;
                     int iFigureNumber = sciGetNbFigure();
+                    freeAllocatedSingleString(l2);
 
                     if (iFigureNumber == 0)
                     {
@@ -209,6 +210,7 @@ int sci_delete(char *fname, void* pvApiCtx)
                 else
                 {
                     Scierror(999, _("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 1, "all");
+                    freeAllocatedSingleString(l2);
                     return 0;
                 }
                 break;
@@ -219,6 +221,11 @@ int sci_delete(char *fname, void* pvApiCtx)
         }
     }
 
+    if (l2)
+    {
+        freeAllocatedSingleString(l2);
+    }
+
     for (i = 0; i < nb_handles; i++)
     {
         int iTemp = 0;
@@ -316,10 +323,5 @@ int sci_delete(char *fname, void* pvApiCtx)
         ReturnArguments(pvApiCtx);
     }
 
-    if (l2)
-    {
-        freeAllocatedSingleString(l2);
-    }
-
     return 0;
 }
index d185fac..ef73656 100644 (file)
@@ -94,7 +94,10 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
             return 1;
         }
 
-        getAllocatedSingleString(pvApiCtx, opts[0].piAddr, &pstDir);
+        if (getAllocatedSingleString(pvApiCtx, opts[0].piAddr, &pstDir))
+        {
+            return 1;
+        }
         dir = pstDir[0];
         freeAllocatedSingleString(pstDir);
     }
@@ -114,7 +117,10 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
     if (opts[2].iPos != -1)
     {
         /* verfier ce que l'on recoit avec "" XXX */
-        getAllocatedSingleString(pvApiCtx, opts[2].piAddr, &format);
+        if (getAllocatedSingleString(pvApiCtx, opts[2].piAddr, &format))
+        {
+            return 1;
+        }
     }
 
     if (opts[3].iPos != -1)
@@ -124,6 +130,7 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
         if (opts[3].iRows != 1 || opts[3].iCols != 1)
         {
             Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[3].iPos);
+            freeAllocatedSingleString(format);
             return 1;
         }
 
@@ -139,6 +146,7 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
         if (opts[4].iRows != 1 || opts[4].iCols != 1)
         {
             Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[4].iPos);
+            freeAllocatedSingleString(format);
             return 1;
         }
 
@@ -153,6 +161,7 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
         if (opts[5].iRows != 1 || opts[5].iCols != 1)
         {
             Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[5].iPos);
+            freeAllocatedSingleString(format);
             return 1;
         }
 
@@ -167,10 +176,14 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
         if (opts[6].iRows != 1 || opts[6].iCols != 1)
         {
             Scierror(999, _("%s: Wrong size for input argument #%d: %d expected.\n"), fname, opts[6].iPos, opts[6].iRows);
+            freeAllocatedSingleString(format);
             return 1;
         }
 
-        getAllocatedSingleString(pvApiCtx, opts[6].piAddr, &pstTics);
+        if (getAllocatedSingleString(pvApiCtx, opts[6].piAddr, &pstTics))
+        {
+            return 1;
+        }
         tics = pstTics[0];
         freeAllocatedSingleString(pstTics);
     }
@@ -182,6 +195,7 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
         if (opts[7].iRows != 1 || opts[7].iCols != 1)
         {
             Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, opts[7].iPos);
+            freeAllocatedSingleString(format);
             return 1;
         }
 
@@ -191,7 +205,10 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
 
     if (opts[8].iPos != -1)
     {
-        getAllocatedMatrixOfString(pvApiCtx, opts[8].piAddr, &opts[8].iRows, &opts[8].iCols, &val);
+        if (getAllocatedMatrixOfString(pvApiCtx, opts[8].piAddr, &opts[8].iRows, &opts[8].iCols, &val))
+        {
+            return 1;
+        }
     }
 
     if (opts[9].iPos != -1)
@@ -250,6 +267,8 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
                          opts[10].iPos, opts[10].iRows, opts[10].iCols, y, &ntics) == 0)
             {
                 ReturnArguments(pvApiCtx);
+                freeAllocatedSingleString(format);
+                freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val);
                 return 0;
             }
             break;
@@ -258,6 +277,8 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
                          opts[10].iPos, opts[10].iRows, opts[10].iCols, y, &ntics) == 0)
             {
                 ReturnArguments(pvApiCtx);
+                freeAllocatedSingleString(format);
+                freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val);
                 return 0;
             }
             break;
@@ -266,11 +287,15 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
                          opts[10].iPos, opts[10].iRows, opts[10].iCols, y, &ntics) == 0)
             {
                 ReturnArguments(pvApiCtx);
+                freeAllocatedSingleString(format);
+                freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val);
                 return 0;
             }
             break;
         default:
             Scierror(999, _("%: Wrong value for %s '%c': '%s', '%s' and '%s' expected.\n"), fname, "tics", dir, "r", "v", "i");
+            freeAllocatedSingleString(format);
+            freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val);
             return 0;
     }
 
@@ -280,6 +305,8 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
         if (opts[8].iRows * opts[8].iCols != ntics)
         {
             Scierror(999, _("%s: Wrong size for input argument #%d: %d expected.\n"), fname, opts[8].iPos, opts[8].iRows * opts[8].iCols);
+            freeAllocatedSingleString(format);
+            freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val);
             return 1;
         }
 
@@ -287,7 +314,9 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
     }
 
     Objdrawaxis(dir, tics, x, &nx, y, &ny, val, sub_int, format, fontsize, textcolor, ticscolor, 'n', seg_flag, nb_tics_labels);
-
+    
+    freeAllocatedSingleString(format);
+    freeAllocatedMatrixOfString(opts[8].iRows, opts[8].iCols, val);
     createScalarHandle(pvApiCtx, iRhs + 1, getHandle(getCurrentObject()));
     AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
     ReturnArguments(pvApiCtx);
index 2b11547..2e3ddcb 100644 (file)
@@ -75,6 +75,7 @@ int sci_move(char * fname, void *pvApiCtx)
         else
         {
             Scierror(999, _("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 3, "alone");
+            freeAllocatedSingleString(l3);
             return 1;
         }
 
index 90edca7..9afb900 100644 (file)
@@ -278,6 +278,7 @@ int sci_set(char *fname, void *pvApiCtx)
             freeAllocatedSingleString(pstPath);
             return 1;
         }
+        freeAllocatedSingleString(pstPath);
     }
     else
     {
@@ -341,6 +342,7 @@ int sci_set(char *fname, void *pvApiCtx)
         if (sciErr.iErr)
         {
             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1);
+            freeAllocatedSingleString(pstProperty);
             return 1;
         }
 
@@ -369,8 +371,8 @@ int sci_set(char *fname, void *pvApiCtx)
             sciErr = getVarType(pvApiCtx, piAddr3, &iType3);
             if (sciErr.iErr)
             {
-                freeAllocatedSingleString(pstProperty);
                 Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1);
+                freeAllocatedSingleString(pstProperty);
                 return 1;
             }
 
@@ -393,15 +395,15 @@ int sci_set(char *fname, void *pvApiCtx)
                     {
                         if (isScalar(pvApiCtx, piAddr3) == 0)
                         {
-                            freeAllocatedSingleString(pstProperty);
                             Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, iPos + 1);
+                            freeAllocatedSingleString(pstProperty);
                             return 1;
                         }
 
                         if (getAllocatedSingleString(pvApiCtx, piAddr3, (char**)&pvData))
                         {
-                            freeAllocatedSingleString(pstProperty);
                             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1);
+                            freeAllocatedSingleString(pstProperty);
                             return 1;
                         }
                         iRows3 = (int)strlen((char*)pvData);
@@ -411,7 +413,12 @@ int sci_set(char *fname, void *pvApiCtx)
                     else
                     {
                         isMatrixOfString = 1;
-                        getAllocatedMatrixOfString(pvApiCtx, piAddr3, &iRows3, &iCols3, (char***)&pvData);
+                        if (getAllocatedMatrixOfString(pvApiCtx, piAddr3, &iRows3, &iCols3, (char***)&pvData))
+                        {
+                            Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1);
+                            freeAllocatedSingleString(pstProperty);
+                            return 1;
+                        }
                     }
                     break;
                 case sci_list :
@@ -426,8 +433,16 @@ int sci_set(char *fname, void *pvApiCtx)
 
             if (sciErr.iErr)
             {
-                freeAllocatedSingleString(pstProperty);
                 Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1);
+                freeAllocatedSingleString(pstProperty);
+                if (isMatrixOfString == 1)
+                {
+                    freeAllocatedMatrixOfString(iRows3, iCols3, (char**)pvData);
+                }
+                else
+                {
+                    freeAllocatedSingleString((char*)pvData);
+                }
                 return 1;
             }
         }
index fa0e1f6..4d25e3a 100644 (file)
@@ -75,6 +75,7 @@ int sci_xchange(char * fname, void *pvApiCtx)
         int* l2 = NULL;
         double* l3 = NULL;
         double* l4 = NULL;
+        freeAllocatedSingleString(l3Input);
 
         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
         if (sciErr.iErr)
@@ -154,6 +155,7 @@ int sci_xchange(char * fname, void *pvApiCtx)
         double* l2 = NULL;
         int* l3 = NULL;
         int* l4 = NULL;
+        freeAllocatedSingleString(l3Input);
 
         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1);
         if (sciErr.iErr)
@@ -234,8 +236,6 @@ int sci_xchange(char * fname, void *pvApiCtx)
     l5[2] = viewingRect[2];
     l5[3] = viewingRect[3];
 
-    freeAllocatedSingleString(l3Input);
-
     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
     AssignOutputVariable(pvApiCtx, 2) = nbInputArgument(pvApiCtx) + 2;
     AssignOutputVariable(pvApiCtx, 3) = nbInputArgument(pvApiCtx) + 3;
index 63b30bf..e395e88 100644 (file)
@@ -95,6 +95,7 @@ int sci_xclick(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            deleteJxclickString(menuCallback);
             return 1;
         }
 
@@ -111,6 +112,7 @@ int sci_xclick(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            deleteJxclickString(menuCallback);
             return 1;
         }
 
@@ -126,6 +128,7 @@ int sci_xclick(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            deleteJxclickString(menuCallback);
             return 1;
         }
 
@@ -141,6 +144,7 @@ int sci_xclick(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            deleteJxclickString(menuCallback);
             return 1;
         }
 
@@ -156,6 +160,7 @@ int sci_xclick(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            deleteJxclickString(menuCallback);
             return 1;
         }
 
@@ -172,8 +177,10 @@ int sci_xclick(char *fname, void *pvApiCtx)
         if (allocSingleString(pvApiCtx, nbInputArgument(pvApiCtx) + 5, istr * one, &strRep))
         {
             Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            deleteJxclickString(menuCallback);
             return 1;
         }
+        freeAllocatedSingleString(strRep);
         strncpy(strRep, menuCallback, istr);
     }
 
index 3948e9a..160a9d3 100644 (file)
@@ -106,19 +106,19 @@ static int xlfont_one_rhs(char * fname, void* pvApiCtx)
         {
             int nbElements = 0;
             char **fontsname = getAvailableFontsName(&nbElements);
+            freeAllocatedSingleString(strl1);
 
             m1 = nbElements;
             n1 = 1;
 
             sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, m1, n1, (const char * const*)fontsname);
+            freeArrayOfString(fontsname, nbElements);
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
                 return 1;
             }
 
-            freeArrayOfString(fontsname, nbElements);
-            freeAllocatedSingleString(strl1);
             AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
             ReturnArguments(pvApiCtx);
             return 0;
@@ -136,6 +136,7 @@ static int xlfont_one_rhs(char * fname, void* pvApiCtx)
             if (isAvailableFontsName(strl1))
             {
                 int fontID = addFont(strl1);
+                freeAllocatedSingleString(strl1);
 
                 m1 = 1;
                 n1 = 1;
@@ -150,7 +151,6 @@ static int xlfont_one_rhs(char * fname, void* pvApiCtx)
 
                 l1[0] = fontID;
 
-                freeAllocatedSingleString(strl1);
                 AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
                 ReturnArguments(pvApiCtx);
                 return 0;
@@ -158,6 +158,7 @@ static int xlfont_one_rhs(char * fname, void* pvApiCtx)
             else if (FileExist(strl1))
             {
                 int fontID = addFontFromFilename(strl1);
+                freeAllocatedSingleString(strl1);
 
                 m1 = 1;
                 n1 = 1;
@@ -172,7 +173,6 @@ static int xlfont_one_rhs(char * fname, void* pvApiCtx)
 
                 l1[0] = fontID;
 
-                freeAllocatedSingleString(strl1);
                 AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
                 ReturnArguments(pvApiCtx);
                 return 0;
@@ -288,6 +288,7 @@ static int xlfont_n_rhs(char * fname, void* pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeAllocatedSingleString(strl1);
             return 1;
         }
 
@@ -297,6 +298,7 @@ static int xlfont_n_rhs(char * fname, void* pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 2);
+            freeAllocatedSingleString(strl1);
             return 1;
         }
 
@@ -307,6 +309,7 @@ static int xlfont_n_rhs(char * fname, void* pvApiCtx)
             if (fontIndex < 0)
             {
                 Scierror(999, _("%s: Wrong value for input argument #%d: Non-negative int expected.\n"), fname, 2);
+                freeAllocatedSingleString(strl1);
                 return 0;
             }
 
@@ -321,6 +324,7 @@ static int xlfont_n_rhs(char * fname, void* pvApiCtx)
                 {
                     printError(&sciErr, 0);
                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
+                    freeAllocatedSingleString(strl1);
                     return 1;
                 }
 
@@ -340,6 +344,7 @@ static int xlfont_n_rhs(char * fname, void* pvApiCtx)
                 {
                     printError(&sciErr, 0);
                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
+                    freeAllocatedSingleString(strl1);
                     return 1;
                 }
 
index 566b3e7..1e7c224 100644 (file)
@@ -133,8 +133,10 @@ int sci_xpoly(char * fname, void *pvApiCtx)
         else
         {
             Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 3, "lines", "marks");
+            freeAllocatedSingleString(l3);
             return 0;
         }
+        freeAllocatedSingleString(l3);
     }
     else
     {
@@ -214,8 +216,6 @@ int sci_xpoly(char * fname, void *pvApiCtx)
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
 
-    freeAllocatedSingleString(l3);
-
     return 0;
 }
 /*--------------------------------------------------------------------------*/
index 7c7fae0..be376cf 100644 (file)
@@ -81,6 +81,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
     {
         AssignOutputVariable(pvApiCtx, 1) = 0;
         ReturnArguments(pvApiCtx);
+        freeArrayOfString(Str, m3 * n3);
         return 0;
     }
 
@@ -88,6 +89,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -97,6 +99,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
     {
         printError(&sciErr, 0);
         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 1);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -104,6 +107,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -113,6 +117,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
     {
         printError(&sciErr, 0);
         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 2);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -130,6 +135,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
         Scierror(999, _("%s: Incompatible input arguments #%d and #%d: Same element number expected.\n"), fname, 1, 2);
         AssignOutputVariable(pvApiCtx, 1) = 0;
         ReturnArguments(pvApiCtx);
+        freeArrayOfString(Str, m3 * n3);
         return 0;
     }
 
@@ -137,6 +143,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
     {
         AssignOutputVariable(pvApiCtx, 1) = 0;
         ReturnArguments(pvApiCtx);
+        freeArrayOfString(Str, m3 * n3);
         return 0;
     }
 
@@ -146,6 +153,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
@@ -155,6 +163,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 4);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
@@ -163,6 +172,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
             Scierror(999, _("%s: Wrong size for input argument #%d: %d or %d elements expected.\n"), fname, 4, 1, nbElement);
             AssignOutputVariable(pvApiCtx, 1) = 0;
             ReturnArguments(pvApiCtx);
+            freeArrayOfString(Str, m3 * n3);
             return 0;
         }
     }
@@ -172,6 +182,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
@@ -181,6 +192,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
         {
             printError(&sciErr, 0);
             Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 5);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
@@ -189,6 +201,7 @@ int sci_xstring(char *fname, void *pvApiCtx)
             Scierror(999, _("%s: Wrong size for input argument #%d: %d or %d elements expected.\n"), fname, 5, 1, nbElement);
             AssignOutputVariable(pvApiCtx, 1) = 0;
             ReturnArguments(pvApiCtx);
+            freeArrayOfString(Str, m3 * n3);
             return 0;
         }
     }
index c078f44..8e909e2 100644 (file)
@@ -128,6 +128,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     {
         AssignOutputVariable(pvApiCtx, 1) = 0;
         ReturnArguments(pvApiCtx);
+        freeArrayOfString(Str, m3 * n3);
         return 0;
     }
 
@@ -135,6 +136,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -144,6 +146,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     {
         printError(&sciErr, 0);
         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 4);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -151,6 +154,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     if (m4 != 1 || n4 != 1)
     {
         Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, 4);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -159,6 +163,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     if (sciErr.iErr)
     {
         printError(&sciErr, 0);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -168,6 +173,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     {
         printError(&sciErr, 0);
         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 5);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -175,6 +181,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
     if (m5 != 1 || n5 != 1)
     {
         Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, 5);
+        freeArrayOfString(Str, m3 * n3);
         return 1;
     }
 
@@ -186,6 +193,7 @@ int sci_xstringb(char *fname, void *pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
@@ -193,12 +201,14 @@ int sci_xstringb(char *fname, void *pvApiCtx)
         if (isScalar(pvApiCtx, piAddrl6) == 0)
         {
             Scierror(999, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 6);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
         if (getAllocatedSingleString(pvApiCtx, piAddrl6, &l6))
         {
             Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 6);
+            freeArrayOfString(Str, m3 * n3);
             return 1;
         }
 
@@ -210,6 +220,8 @@ int sci_xstringb(char *fname, void *pvApiCtx)
         else
         {
             Scierror(999, _("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 6, "fill");
+            freeAllocatedSingleString(l6);
+            freeArrayOfString(Str, m3 * n3);
             return 0;
         }
 
index b88c3d5..9238a62 100644 (file)
@@ -152,6 +152,7 @@ int sci_xtitle(char * fname, void *pvApiCtx)
 
         if (m * n == 0)
         {
+            freeArrayOfString(Str, m * n);
             continue;
         }
 
index 00d0d79..874045f 100644 (file)
@@ -139,6 +139,7 @@ types::Function::ReturnValue sci_get(types::typed_list &in, int _iRetCount, type
             if (path[0] == '\0')
             {
                 Scierror(999, _("%s: Unable to get useful path from this handle.\n"), "get");
+                FREE(path);
                 return types::Function::Error;
             }
 
index ddad629..a092f68 100644 (file)
@@ -234,11 +234,8 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
         {
             if (in[2]->isDouble() == false)
             {
-                if (bFREE)
-                {
-                    FREE(strf);
-                }
                 Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), "Matplot1", 3);
+                FREE(strf);
                 return types::Function::Error;
             }
 
@@ -247,11 +244,8 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
             {
                 if (in[3]->isDouble() == false)
                 {
-                    if (bFREE)
-                    {
-                        FREE(strf);
-                    }
                     Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), "Matplot1", 4);
+                    FREE(strf);
                     return types::Function::Error;
                 }
 
@@ -271,12 +265,12 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
 
     if (opt.size() > 4)
     {
+        Scierror(999, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "Matplot", 1, 5);
         if (bFREE)
         {
             FREE(strf);
         }
-
-        Scierror(999, _("%s: Wrong number of input argument(s): %d to %d expected.\n"), "Matplot", 1, 5);
+        delete[] nax;
         return types::Function::Error;
     }
 
@@ -287,6 +281,7 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
         {
             if (o.second->isString() == false)
             {
+                Scierror(999, _("%s: Wrong type for input argument #%ls: string expected.\n"), "Matplot1", o.first.c_str());
                 if (bFREE)
                 {
                     FREE(strf);
@@ -306,7 +301,6 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
                 {
                     delete[] axesflag;
                 }
-                Scierror(999, _("%s: Wrong type for input argument #%ls: string expected.\n"), "Matplot1", o.first.c_str());
                 return types::Function::Error;
             }
 
@@ -322,6 +316,7 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
         {
             if (o.second->isDouble() == false)
             {
+                Scierror(999, _("%s: Wrong type for input argument #%ls: A matrix expected.\n"), "Matplot1", o.first.c_str());
                 if (bFREE)
                 {
                     FREE(strf);
@@ -341,7 +336,6 @@ types::Function::ReturnValue sci_matplot(types::typed_list &in, types::optional_
                 {
                     delete[] axesflag;
                 }
-                Scierror(999, _("%s: Wrong type for input argument #%ls: A matrix expected.\n"), "Matplot1", o.first.c_str());
                 return types::Function::Error;
             }
 
index fcc1c06..2a32cc5 100644 (file)
@@ -126,7 +126,7 @@ void intArrayCopy(int dest[], const int src[], int nbElement)
     memcpy( dest, src, nbElement * sizeof(int) ) ;
 }
 /*------------------------------------------------------------------------*/
-void stringArrayCopy(char * dest[], char * src[], int nbElement)
+BOOL stringArrayCopy(char * dest[], char * src[], int nbElement)
 {
     int i = 0;
     for ( i = 0 ; i < nbElement ; i++ )
@@ -139,11 +139,12 @@ void stringArrayCopy(char * dest[], char * src[], int nbElement)
         if ( dest[i] == NULL )
         {
             destroyStringArray( dest, nbElement ) ;
-            return ;
+            return FALSE;
         }
 
         strcpy( dest[i], src[i] ) ;
     }
+    return TRUE;
 }
 /*------------------------------------------------------------------------*/
 void setDoubleArraySingleValue(double dest[], double value, int nbElement)
@@ -220,9 +221,15 @@ char ** createStringArrayCopy(char * src[], int nbElement)
         return NULL ;
     }
 
-    stringArrayCopy( res, src, nbElement ) ;
+    if ( stringArrayCopy( res, src, nbElement ) )
+    {
+        return res ;
+    }
+    else
+    {
+        return NULL;
+    }
 
-    return res ;
 
 }
 /*--------------------------------------------------------------------------*/
index a9e76a7..146e61d 100644 (file)
@@ -226,11 +226,15 @@ int get_strf_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char ** st
             return 0;
         }
 
-        getAllocatedSingleString(_pvCtx, piAddr, &pstData);
+        if (getAllocatedSingleString(_pvCtx, piAddr, &pstData))
+        {
+            return 0;
+        }
+
         if ((int)strlen(pstData) != 3)
         {
-            freeAllocatedSingleString(pstData);
             Scierror(999, _("%s: Wrong size for input argument #%d: String of %d characters expected.\n"), fname, pos, 3);
+            freeAllocatedSingleString(pstData);
             return 0;
         }
         *strf = pstData;
@@ -246,11 +250,15 @@ int get_strf_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char ** st
             return 0;
         }
 
-        getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData);
+        if (getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData))
+        {
+            return 0;
+        }
+
         if ((int)strlen(pstData) != 3)
         {
-            freeAllocatedSingleString(pstData);
             Scierror(999, _("%s: Wrong size for input argument #%d: String of %d characters expected.\n"), fname, kopt, 3);
+            freeAllocatedSingleString(pstData);
             return 0;
         }
         *strf = pstData;
@@ -279,7 +287,10 @@ int get_legend_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char **
 
         if (iType)
         {
-            getAllocatedSingleString(_pvCtx, piAddr, &pstData);
+            if (getAllocatedSingleString(_pvCtx, piAddr, &pstData))
+            {
+                return 0;
+            }
             *legend = pstData;
         }
         else
@@ -290,7 +301,10 @@ int get_legend_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char **
     else if ((kopt = FindOpt(_pvCtx, "leg", opts)) >= 0)
     {
         char* pstData = NULL;
-        getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData);
+        if (getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData))
+        {
+            return 0;
+        }
         *legend = pstData;
     }
     else
@@ -317,7 +331,10 @@ int get_labels_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char **
 
         if (iType)
         {
-            getAllocatedSingleString(_pvCtx, piAddr, &pstData);
+            if (getAllocatedSingleString(_pvCtx, piAddr, &pstData))
+            {
+                return 0;
+            }
             *labels = pstData;
         }
         else
@@ -337,7 +354,10 @@ int get_labels_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char **
     else if ((kopt = FindOpt(_pvCtx, "leg", opts)) >= 0)
     {
         char* pstData = NULL;
-        getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData);
+        if (getAllocatedSingleString(_pvCtx, opts[kopt].piAddr, &pstData))
+        {
+            return 0;
+        }
         *labels = pstData;
     }
     else
@@ -643,11 +663,16 @@ int get_logflags_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char *
         return 1;
     }
 
-    getAllocatedSingleString(_pvCtx, piAddr, &pstLog);
+    if (getAllocatedSingleString(_pvCtx, piAddr, &pstLog))
+    {
+        return 0;
+    }
+
     iLog = (int)strlen(pstLog);
     if (iLog != 2 && iLog != 3)
     {
         Scierror(999, "%s: Wrong size for input argument #%d: %d or %d expected\n", fname, pos, 2, 3);
+        freeAllocatedSingleString(pstLog);
         return 0;
     }
 
@@ -657,6 +682,7 @@ int get_logflags_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char *
         {
             //Err = pos;
             SciError(116);
+            freeAllocatedSingleString(pstLog);
             return 0;
         }
 
@@ -673,12 +699,14 @@ int get_logflags_arg(void* _pvCtx, char *fname, int pos, rhs_opts opts[], char *
         {
             //Err = pos;
             SciError(116);
+            freeAllocatedSingleString(pstLog);
             return 0;
         }
 
         *logFlags = pstLog;
     }
 
+    freeAllocatedSingleString(pstLog);
     return 1;
 }
 /*--------------------------------------------------------------------------*/
index de2dfdb..75a2525 100644 (file)
@@ -469,6 +469,7 @@ int InitAxesModel()
 
         if (stringVector[i] == NULL)
         {
+            destroyStringArray(stringVector, i);
             return -1;
         }
     }
@@ -494,6 +495,7 @@ int InitAxesModel()
 
         if (stringVector[i] == NULL)
         {
+            destroyStringArray(stringVector, defaultNumberTicks);
             return -1;
         }
     }
index 8d8be28..e6f0ea6 100644 (file)
@@ -43,6 +43,7 @@ AssignedList * createTlistForTicks(void* _pvCtx)
     if (!isListCurrentElementDoubleMatrix(_pvCtx, tlist))
     {
         Scierror(999, _("%s should be a vector of double.\n"), "locations");
+        destroyAssignedList(tlist);
         return NULL;
     }
 
@@ -54,6 +55,7 @@ AssignedList * createTlistForTicks(void* _pvCtx)
         if (!isListCurrentElementEmptyMatrix(_pvCtx, tlist))
         {
             Scierror(999, _("Ticks location and label vectors must have the same size.\n"));
+            destroyAssignedList(tlist);
             return NULL;
         }
     }
@@ -62,6 +64,7 @@ AssignedList * createTlistForTicks(void* _pvCtx)
         if (!isListCurrentElementStringMatrix(_pvCtx, tlist))
         {
             Scierror(999, _("%s should be a string vector.\n"), "labels");
+            destroyAssignedList(tlist);
             return NULL;
         }
 
@@ -70,6 +73,7 @@ AssignedList * createTlistForTicks(void* _pvCtx)
         if (nbRowLoc != nbRowLab || nbColLoc != nbColLab)
         {
             Scierror(999, _("Ticks location and label vectors must have the same size.\n"));
+            destroyAssignedList(tlist);
             return NULL;
         }
     }
index 731baa7..7caa84a 100644 (file)
@@ -143,6 +143,7 @@ AssignedList * createAssignedList(void* _pvCtx, int _iRhs, int _iNbItem)
     /* check the size */
     if (iItem != newList->iNbItem)
     {
+        FREE(newList);
         return NULL;
     }
 
index 8e9d459..f7bca22 100644 (file)
@@ -521,6 +521,7 @@ int createEtchedBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
         sciErr = getListItemAddress(_pvCtx, _piAddrList, iPos + 1, &piAddr4);
         if (sciErr.iErr)
         {
+            freeAllocatedSingleString(pstHlOutColor);
             return SET_PROPERTY_ERROR;
         }
 
@@ -753,11 +754,15 @@ int createTitledBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
         sciErr = getListItemAddress(_pvCtx, piAddr6, 3, &piAddrFont);
         if (sciErr.iErr)
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
             return SET_PROPERTY_ERROR;
         }
 
         if (getScalarDouble(_pvCtx, piAddrFont, &dblFontSize))
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
             return SET_PROPERTY_ERROR;
         }
 
@@ -766,22 +771,32 @@ int createTitledBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
         sciErr = getListItemAddress(_pvCtx, piAddr6, 4, &piAddrFont);
         if (sciErr.iErr)
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
             return SET_PROPERTY_ERROR;
         }
 
         if (getAllocatedSingleString(_pvCtx, piAddrFont, &pstFontAngle))
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
             return SET_PROPERTY_ERROR;
         }
 
         sciErr = getListItemAddress(_pvCtx, piAddr6, 5, &piAddrFont);
         if (sciErr.iErr)
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
+            freeAllocatedSingleString(pstFontAngle);
             return SET_PROPERTY_ERROR;
         }
 
         if (getAllocatedSingleString(_pvCtx, piAddrFont, &pstFontWeight))
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
+            freeAllocatedSingleString(pstFontAngle);
             return SET_PROPERTY_ERROR;
         }
     }
@@ -792,11 +807,19 @@ int createTitledBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
         sciErr = getListItemAddress(_pvCtx, _piAddrList, 7, &piAddr7);
         if (sciErr.iErr)
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
+            freeAllocatedSingleString(pstFontAngle);
+            freeAllocatedSingleString(pstFontWeight);
             return SET_PROPERTY_ERROR;
         }
 
         if (getAllocatedSingleString(_pvCtx, piAddr7, &pstColor))
         {
+            freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
+            freeAllocatedSingleString(pstFontAngle);
+            freeAllocatedSingleString(pstFontWeight);
             return SET_PROPERTY_ERROR;
         }
     }
@@ -814,6 +837,10 @@ int createTitledBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
     if (iBorder == 0)
     {
         freeAllocatedSingleString(pstTitle);
+        freeAllocatedSingleString(pstFontName);
+        freeAllocatedSingleString(pstFontAngle);
+        freeAllocatedSingleString(pstFontWeight);
+        freeAllocatedSingleString(pstColor);
         return SET_PROPERTY_ERROR;
     }
 
@@ -856,6 +883,10 @@ int createTitledBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
         if (iChildBorder == 0)
         {
             freeAllocatedSingleString(pstTitle);
+            freeAllocatedSingleString(pstFontName);
+            freeAllocatedSingleString(pstFontAngle);
+            freeAllocatedSingleString(pstFontWeight);
+            freeAllocatedSingleString(pstColor);
             return SET_PROPERTY_ERROR;
         }
 
index 17db2e4..59a5f85 100644 (file)
@@ -79,6 +79,7 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
         //depend of kind of tlist
         if (strcmp(pstType, "NoLayoutConstraint") == 0)
         {
+            freeAllocatedMatrixOfString(iRows, iCols, pstField);
             return clearConstraints(iObjUID);
         }
         else if (strcmp(pstType, "BorderConstraint") == 0)
@@ -99,11 +100,13 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
             sciErr = getListItemAddress(_pvCtx, piAddrList, 2, &piAddr2);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             if (getAllocatedSingleString(_pvCtx, piAddr2, &pstPos))
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
@@ -132,18 +135,23 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
             {
                 Scierror(999, _("Wrong value for '%s' property: Must be in the set {%s}.\n"), "constraints.position", "center, top, bottom, left, right");
                 freeAllocatedSingleString(pstPos);
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
+            freeAllocatedSingleString(pstPos);
+
             sciErr = getListItemAddress(_pvCtx, piAddrList, 3, &piAddr3);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             sciErr = getMatrixOfDouble(_pvCtx, piAddr3, &iRows3, &iCols3, &pdblPreferredSize);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
@@ -151,12 +159,12 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
             piPreferredSize[0] = (int)pdblPreferredSize[0];
             piPreferredSize[1] = (int)pdblPreferredSize[1];
 
-            freeAllocatedSingleString(pstPos);
             setGraphicObjectProperty(iObjUID, __GO_UI_BORDER_POSITION__, &iPos, jni_int, 1);
             setGraphicObjectProperty(iObjUID, __GO_UI_BORDER_PREFERREDSIZE__, piPreferredSize, jni_int_vector, 2);
         }
         else if (strcmp(pstType, "GridConstraints") == 0)
         {
+            freeAllocatedMatrixOfString(iRows, iCols, pstField);
             return clearConstraints(iObjUID);
         }
         else if (strcmp(pstType, "GridBagConstraints") == 0)
@@ -199,6 +207,7 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
             double* pdblPreferredSize = NULL;
             int piPreferredSize[2];
 
+            freeAllocatedMatrixOfString(iRows, iCols, pstField);
             sciErr = getListItemAddress(_pvCtx, piAddrList, 2, &piAddr2);
             if (sciErr.iErr)
             {
@@ -365,8 +374,6 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
             freeAllocatedMatrixOfString(iRows, iCols, pstField);
             return SET_PROPERTY_ERROR;
         }
-
-        freeAllocatedMatrixOfString(iRows, iCols, pstField);
     }
 
     return SET_PROPERTY_SUCCEED;
index 86a4524..5cc90cd 100644 (file)
@@ -74,6 +74,7 @@ int set_layout_options_property(void* _pvCtx, int iObjUID, void* _pvData, int va
         //depend of kind of tlist
         if (strcmp(pstType, "OptNoLayout") == 0)
         {
+            freeAllocatedMatrixOfString(iRows, iCols, pstField);
             return clearLayoutOptions(iObjUID);
         }
         else if (strcmp(pstType, "OptBorder") == 0)
@@ -88,12 +89,14 @@ int set_layout_options_property(void* _pvCtx, int iObjUID, void* _pvData, int va
             sciErr = getListItemAddress(_pvCtx, piAddrList, 2, &piAddr2);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             sciErr = getMatrixOfDouble(_pvCtx, piAddr2, &iRows2, &iCols2, &pdblPadding);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
@@ -121,24 +124,28 @@ int set_layout_options_property(void* _pvCtx, int iObjUID, void* _pvData, int va
             sciErr = getListItemAddress(_pvCtx, piAddrList, 2, &piAddr2);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             sciErr = getMatrixOfDouble(_pvCtx, piAddr2, &iRows2, &iCols2, &pdblGrid);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             sciErr = getListItemAddress(_pvCtx, piAddrList, 3, &piAddr3);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             sciErr = getMatrixOfDouble(_pvCtx, piAddr3, &iRows3, &iCols3, &pdblPadding);
             if (sciErr.iErr)
             {
+                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
@@ -152,6 +159,7 @@ int set_layout_options_property(void* _pvCtx, int iObjUID, void* _pvData, int va
         }
         else if (strcmp(pstType, "OptGridBag") == 0)
         {
+            freeAllocatedMatrixOfString(iRows, iCols, pstField);
             return clearLayoutOptions(iObjUID);
         }
         else
@@ -159,8 +167,6 @@ int set_layout_options_property(void* _pvCtx, int iObjUID, void* _pvData, int va
             freeAllocatedMatrixOfString(iRows, iCols, pstField);
             return SET_PROPERTY_ERROR;
         }
-
-        freeAllocatedMatrixOfString(iRows, iCols, pstField);
     }
 
     return SET_PROPERTY_SUCCEED;
index dcca599..73554f2 100644 (file)
@@ -71,6 +71,7 @@ int set_x_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     if (userGrads == NULL && nbTicsRow == -1)
     {
         Scierror(999, _("%s: No more memory.\n"), "set_x_ticks_property");
+        destroyAssignedList(tlist);
         return SET_PROPERTY_ERROR;
     }
 
@@ -84,6 +85,7 @@ int set_x_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     if (status == FALSE)
     {
         Scierror(999, _("'%s' property does not exist for this handle.\n"), "x_ticks");
+        destroyAssignedList(tlist);
         FREE(userGrads);
         return SET_PROPERTY_ERROR;
     }
@@ -113,7 +115,7 @@ int set_x_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     {
         FREE(userGrads);
     }
-
+    freeAllocatedMatrixOfString(nbTicsRow, nbTicsCol, userLabels);
     destroyAssignedList(tlist);
 
     return SET_PROPERTY_SUCCEED;
index b072512..02d4ee6 100644 (file)
@@ -73,6 +73,7 @@ int set_y_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     if (userGrads == NULL && nbTicsRow == -1)
     {
         Scierror(999, _("%s: No more memory.\n"), "set_y_ticks_property");
+        destroyAssignedList(tlist);
         return SET_PROPERTY_ERROR;
     }
 
@@ -86,6 +87,7 @@ int set_y_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     if (status == FALSE)
     {
         Scierror(999, _("'%s' property does not exist for this handle.\n"), "y_ticks");
+        destroyAssignedList(tlist);
         FREE(userGrads);
         return SET_PROPERTY_ERROR;
     }
@@ -115,7 +117,7 @@ int set_y_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     {
         FREE(userGrads);
     }
-
+    freeAllocatedMatrixOfString(nbTicsRow, nbTicsCol, userLabels);
     destroyAssignedList(tlist);
 
     return SET_PROPERTY_SUCCEED;
index 32967bd..b11e5eb 100644 (file)
@@ -73,6 +73,7 @@ int set_z_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     {
         // if nbTicsRow = 0, it's just an empty matrix
         Scierror(999, _("%s: No more memory.\n"), "set_z_ticks_property");
+        destroyAssignedList(tlist);
         return SET_PROPERTY_ERROR;
     }
 
@@ -86,6 +87,7 @@ int set_z_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     if (status == FALSE)
     {
         Scierror(999, _("'%s' property does not exist for this handle.\n"), "z_ticks");
+        destroyAssignedList(tlist);
         FREE(userGrads);
         return SET_PROPERTY_ERROR;
     }
@@ -115,7 +117,7 @@ int set_z_ticks_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType
     {
         FREE(userGrads);
     }
-
+    freeAllocatedMatrixOfString(nbTicsRow, nbTicsCol, userLabels);
     destroyAssignedList(tlist);
 
     return SET_PROPERTY_SUCCEED;