Coverity: graphics module resource leaks fixed 64/18364/4
Dhruv Khattar [Wed, 13 Jul 2016 20:21:14 +0000 (01:21 +0530)]
Change-Id: I0e06d3b3f38192db92745fdd719cd9422b29587d

12 files changed:
scilab/modules/graphics/sci_gateway/c/sci_champ.c
scilab/modules/graphics/sci_gateway/c/sci_drawaxis.c
scilab/modules/graphics/sci_gateway/c/sci_fec.c
scilab/modules/graphics/sci_gateway/c/sci_grayplot.c
scilab/modules/graphics/sci_gateway/c/sci_param3d.c
scilab/modules/graphics/sci_gateway/c/sci_param3d1.c
scilab/modules/graphics/sci_gateway/c/sci_plot2d.c
scilab/modules/graphics/sci_gateway/c/sci_plot2d1.c
scilab/modules/graphics/sci_gateway/c/sci_plot3d.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

index f4312b9..8f382ff 100644 (file)
@@ -56,6 +56,7 @@ int sci_champ_G(char *fname,
     };
 
     char   * strf = NULL;
+    BOOL freeStrf = FALSE;
     char strfl[4];
     double* rect = NULL;
 
@@ -202,6 +203,7 @@ int sci_champ_G(char *fname,
     {
         return 0;
     }
+    freeStrf = !isDefStrf(strf);
 
     getOrCreateDefaultSubwin();
 
@@ -216,6 +218,10 @@ int sci_champ_G(char *fname,
     }
 
     (*func)((l1), (l2), (l3), (l4), &m3, &n3, strf, rect, arfact, 4L);
+    if (freeStrf)
+    {
+        freeAllocatedSingleString(strf);
+    }
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
     return 0;
index fe5aeb8..c3a764f 100644 (file)
@@ -182,6 +182,7 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
 
         if (getAllocatedSingleString(pvApiCtx, opts[6].piAddr, &pstTics))
         {
+            freeAllocatedSingleString(format);
             return 1;
         }
         tics = pstTics[0];
@@ -207,6 +208,7 @@ int sci_drawaxis(char *fname, void* pvApiCtx)
     {
         if (getAllocatedMatrixOfString(pvApiCtx, opts[8].piAddr, &opts[8].iRows, &opts[8].iCols, &val))
         {
+            freeAllocatedSingleString(format);
             return 1;
         }
     }
index 0a721cc..f63214b 100644 (file)
@@ -58,6 +58,8 @@ int sci_fec(char *fname, void *pvApiCtx)
     int* colOut     = NULL;
     BOOL flagNax    = FALSE;
     BOOL withMesh   = FALSE;
+    BOOL freeLegend = FALSE;
+    BOOL freeStrf = FALSE;
 
     int* piAddr1 = NULL;
     int* piAddr2 = NULL;
@@ -185,32 +187,86 @@ int sci_fec(char *fname, void *pvApiCtx)
     {
         return 0;
     }
+    freeStrf = !isDefStrf(strf);
     if (get_legend_arg(pvApiCtx, fname, 6, opts, &legend) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
         return 0;
     }
+    freeLegend = !isDefLegend(legend);
     if (get_rect_arg(pvApiCtx, fname, 7, opts, &rect) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
     if (get_nax_arg(pvApiCtx, 8, opts, &nax, &flagNax)==0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
     if (get_zminmax_arg(pvApiCtx, fname, 9, opts, &zminmax) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
     if (get_colminmax_arg(pvApiCtx, fname, 10, opts, &colminmax)==0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
     if (get_colout_arg(pvApiCtx, fname, 11, opts, &colOut)==0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
     if (get_with_mesh_arg(pvApiCtx, fname, 12, opts, &withMesh)==0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
 
@@ -234,6 +290,14 @@ int sci_fec(char *fname, void *pvApiCtx)
 
     Objfec ((l1), (l2), (l3), (l4), &mn1, &m3, &n3, strf, legend, rect, nax, zminmax, colminmax, colOut, withMesh, flagNax);
 
+    if (freeStrf)
+    {
+        freeAllocatedSingleString(strf);
+    }
+    if (freeLegend)
+    {
+        freeAllocatedSingleString(legend);
+    }
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
 
index 96744db..611f6a5 100644 (file)
@@ -50,6 +50,7 @@ int sci_grayplot(char *fname, void *pvApiCtx)
     };
 
     char   * strf    = NULL ;
+    BOOL freeStrf = FALSE;
     char strfl[4];
     double* rect    = NULL ;
     int    * nax     = NULL ;
@@ -174,16 +175,29 @@ int sci_grayplot(char *fname, void *pvApiCtx)
     {
         return 0;
     }
+    freeStrf = !isDefStrf(strf);
     if (get_rect_arg(pvApiCtx, fname, 5, opts, &rect) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
         return 0;
     }
     if (get_nax_arg(pvApiCtx, 6, opts, &nax, &flagNax)==0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
         return 0;
     }
     if (get_logflags_arg(pvApiCtx, fname, 7, opts, &logFlags) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
         return 0;
     }
 
@@ -219,6 +233,10 @@ int sci_grayplot(char *fname, void *pvApiCtx)
 
     Objgrayplot ((l1), (l2), (l3), &m3, &n3, strf, rect, nax, flagNax, logFlags);
 
+    if (freeStrf)
+    {
+        freeAllocatedSingleString(strf);
+    }
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
     return 0;
index 8feded7..1309b51 100644 (file)
@@ -26,6 +26,7 @@
 #include "api_scilab.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "DefaultCommandArg.h"
 /*------------------------------------------------------------------------*/
 int sci_param3d(char * fname, void *pvApiCtx)
 {
@@ -51,6 +52,7 @@ int sci_param3d(char * fname, void *pvApiCtx)
     };
 
     char * labels = NULL;
+    BOOL freeLabels = FALSE;
 
     int* piAddr1 = NULL;
     int* piAddr2 = NULL;
@@ -163,11 +165,15 @@ int sci_param3d(char * fname, void *pvApiCtx)
     {
         return 0;
     }
-
+    freeLabels = !isDefLegend(labels);
     iflag_def[1] = 8;
     ifl = &(iflag_def[1]);
     if (get_optional_int_arg(pvApiCtx, fname, 7, "flag", &ifl, 2, opts) == 0)
     {
+        if (freeLabels)
+        {
+            freeAllocatedSingleString(labels);
+        }
         return 0;
     }
     iflag[0] = iflag_def[0];
@@ -175,6 +181,10 @@ int sci_param3d(char * fname, void *pvApiCtx)
     iflag[2] = ifl[1];
     if (get_optional_double_arg(pvApiCtx, fname, 8, "ebox", &ebox, 6, opts) == 0)
     {
+        if (freeLabels)
+        {
+            freeAllocatedSingleString(labels);
+        }
         return 0;
     }
 
@@ -190,6 +200,10 @@ int sci_param3d(char * fname, void *pvApiCtx)
 
 
     /* NG end */
+    if (freeLabels)
+    {
+        freeAllocatedSingleString(labels);
+    }
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
     return 0;
index a1a52d2..f2cfb1f 100644 (file)
@@ -27,6 +27,7 @@
 #include "api_scilab.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "DefaultCommandArg.h"
 /*--------------------------------------------------------------------------*/
 int sci_param3d1(char *fname, void *pvApiCtx)
 {
@@ -52,6 +53,7 @@ int sci_param3d1(char *fname, void *pvApiCtx)
     };
 
     char * labels = NULL;
+    BOOL freeLabels = FALSE;
 
     int* piAddr1  = NULL;
     int* piAddr2  = NULL;
@@ -252,10 +254,15 @@ int sci_param3d1(char *fname, void *pvApiCtx)
     {
         return 0;
     }
+    freeLabels = !isDefLegend(labels);
     iflag_def[1] = 8;
     ifl = &(iflag_def[1]);
     if (get_optional_int_arg(pvApiCtx, fname, 7, "flag", &ifl, 2, opts) == 0)
     {
+        if (freeLabels)
+        {
+            freeAllocatedSingleString(labels);
+        }
         return 0;
     }
     iflag[0] = iflag_def[0];
@@ -264,6 +271,10 @@ int sci_param3d1(char *fname, void *pvApiCtx)
 
     if (get_optional_double_arg(pvApiCtx, fname, 8, "ebox", &ebox, 6, opts) == 0)
     {
+        if (freeLabels)
+        {
+            freeAllocatedSingleString(labels);
+        }
         return 0;
     }
 
@@ -274,6 +285,10 @@ int sci_param3d1(char *fname, void *pvApiCtx)
 
     Objplot3d (fname, &isfac, &izcol, (l1), (l2), (l3), zcol, &m1, &n1, theta, alpha, labels, iflag, ebox, &m1, &n1, &m2, &n2, &m3, &n3, &m3n, &n3n); /*Adding F.Leray 12.03.04*/
 
+    if (freeLabels)
+    {
+        freeAllocatedSingleString(labels);
+    }
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
     return 0;
index 35adba4..276825a 100644 (file)
@@ -66,6 +66,7 @@ int sci_plot2d(char* fname, void *pvApiCtx)
     BOOL flagNax = FALSE;
     char strfl[4];
     BOOL freeStrf = FALSE;
+    BOOL freeLegend = FALSE;
 
     rhs_opts opts[] =
     {
@@ -348,18 +349,44 @@ int sci_plot2d(char* fname, void *pvApiCtx)
     }
     if (get_strf_arg(pvApiCtx, fname, 4 + iskip, opts, &strf) == 0)
     {
+        FREE(style);
         return 0;
     }
+    freeStrf = !isDefStrf(strf);
     if (get_legend_arg(pvApiCtx, fname, 5 + iskip, opts, &legend) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        FREE(style);
         return 0;
     }
+    freeLegend = !isDefLegend(legend);
     if (get_rect_arg(pvApiCtx, fname, 6 + iskip, opts, &rect) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
+        FREE(style);
         return 0;
     }
     if (get_nax_arg(pvApiCtx, 7 + iskip, opts, &nax, &flagNax)==0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
+        FREE(style);
         return 0;
     }
 
@@ -367,12 +394,19 @@ int sci_plot2d(char* fname, void *pvApiCtx)
     {
         if (get_logflags_arg(pvApiCtx, fname, 8, opts, &logFlags) == 0)
         {
+            if (freeStrf)
+            {
+                freeAllocatedSingleString(strf);
+            }
+            if (freeLegend)
+            {
+                freeAllocatedSingleString(legend);
+            }
+            FREE(style);
             return 0;
         }
     }
 
-    freeStrf = !isDefStrf(strf);
-
     // Check strf [0-1][0-8][0-5]
     if (!isDefStrf(strf) && (strlen(strf) != 3 || strf[0] < '0' || strf[0] > '1' || strf[1] < '0' || strf[1] > '8' || strf[2] < '0' || strf[2] > '5'))
     {
@@ -381,6 +415,11 @@ int sci_plot2d(char* fname, void *pvApiCtx)
         {
             freeAllocatedSingleString(strf);
         }
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
+        FREE(style);
         return -1;
     }
 
@@ -400,6 +439,11 @@ int sci_plot2d(char* fname, void *pvApiCtx)
 
         if (get_optional_int_arg(pvApiCtx, fname, 9, "frameflag", &frame, 1, opts) == 0)
         {
+            if (freeLegend)
+            {
+                freeAllocatedSingleString(legend);
+            }
+            FREE(style);
             return 0;
         }
         if (frame != &frame_def)
@@ -411,16 +455,22 @@ int sci_plot2d(char* fname, void *pvApiCtx)
             else
             {
                 Scierror(999, _("%s: Wrong value for frameflag option.\n"), fname);
-                if (freeStrf)
+                if (freeLegend)
                 {
-                    freeAllocatedSingleString(strf);
+                    freeAllocatedSingleString(legend);
                 }
+                FREE(style);
                 return -1;
             }
         }
 
         if (get_optional_int_arg(pvApiCtx, fname, 9, "axesflag", &axes, 1, opts) == 0)
         {
+            if (freeLegend)
+            {
+                freeAllocatedSingleString(legend);
+            }
+            FREE(style);
             return 0;
         }
         if (axes != &axes_def)
@@ -432,10 +482,11 @@ int sci_plot2d(char* fname, void *pvApiCtx)
             else
             {
                 Scierror(999, _("%s: Wrong value for axesflag option.\n"), fname);
-                if (freeStrf)
+                if (freeLegend)
                 {
-                    freeAllocatedSingleString(strf);
+                    freeAllocatedSingleString(legend);
                 }
+                FREE(style);
                 return -1;
             }
         }
@@ -460,31 +511,46 @@ int sci_plot2d(char* fname, void *pvApiCtx)
             /* based on Rect arg */
             if (rect[0] > rect[2] || rect[1] > rect[3])
             {
+                Scierror(999, _("%s: Impossible status min > max in x or y rect data.\n"), fname);
                 if (freeStrf)
                 {
                     freeAllocatedSingleString(strf);
                 }
-                Scierror(999, _("%s: Impossible status min > max in x or y rect data.\n"), fname);
+                if (freeLegend)
+                {
+                    freeAllocatedSingleString(legend);
+                }
+                FREE(style);
                 return -1;
             }
 
             if (rect[0] <= 0. && logFlags[1] == 'l') /* xmin */
             {
+                Scierror(999, _("%s: Bounds on x axis must be strictly positive to use logarithmic mode.\n"), fname);
                 if (freeStrf)
                 {
                     freeAllocatedSingleString(strf);
                 }
-                Scierror(999, _("%s: Bounds on x axis must be strictly positive to use logarithmic mode.\n"), fname);
+                if (freeLegend)
+                {
+                    freeAllocatedSingleString(legend);
+                }
+                FREE(style);
                 return -1;
             }
 
             if (rect[1] <= 0. && logFlags[2] == 'l') /* ymin */
             {
+                Scierror(999, _("%s: Bounds on y axis must be strictly positive to use logarithmic mode.\n"), fname);
                 if (freeStrf)
                 {
                     freeAllocatedSingleString(strf);
                 }
-                Scierror(999, _("%s: Bounds on y axis must be strictly positive to use logarithmic mode.\n"), fname);
+                if (freeLegend)
+                {
+                    freeAllocatedSingleString(legend);
+                }
+                FREE(style);
                 return -1;
             }
 
@@ -522,11 +588,16 @@ int sci_plot2d(char* fname, void *pvApiCtx)
             {
                 if (logFlags[1] == 'l' && sciFindStPosMin((l1), size_x) <= 0.0)
                 {
+                    Scierror(999, _("%s: At least one x data must be strictly positive to compute the bounds and use logarithmic mode.\n"), fname);
                     if (freeStrf)
                     {
                         freeAllocatedSingleString(strf);
                     }
-                    Scierror(999, _("%s: At least one x data must be strictly positive to compute the bounds and use logarithmic mode.\n"), fname);
+                    if (freeLegend)
+                    {
+                        freeAllocatedSingleString(legend);
+                    }
+                    FREE(style);
                     return -1;
                 }
             }
@@ -537,11 +608,16 @@ int sci_plot2d(char* fname, void *pvApiCtx)
             {
                 if (logFlags[2] == 'l' && sciFindStPosMin((l2), size_y) <= 0.0)
                 {
+                    Scierror(999, _("%s: At least one y data must be strictly positive to compute the bounds and use logarithmic mode\n"), fname);
                     if (freeStrf)
                     {
                         freeAllocatedSingleString(strf);
                     }
-                    Scierror(999, _("%s: At least one y data must be strictly positive to compute the bounds and use logarithmic mode\n"), fname);
+                    if (freeLegend)
+                    {
+                        freeAllocatedSingleString(legend);
+                    }
+                    FREE(style);
                     return -1;
                 }
             }
@@ -561,6 +637,10 @@ int sci_plot2d(char* fname, void *pvApiCtx)
     {
         freeAllocatedSingleString(strf);
     }
+    if (freeLegend)
+    {
+        freeAllocatedSingleString(legend);
+    }
 
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
index c478ed5..128b5dc 100644 (file)
@@ -74,12 +74,14 @@ int sci_plot2d1_G(char * fname, int ptype, void *pvApiCtx)
     };
 
     int    * style    = NULL ;
-    double* rect     = NULL ;
+    double* rect      = NULL ;
     int    * nax      = NULL ;
     BOOL     flagNax  = FALSE;
     char   * strf     = NULL ;
     char strfl[4];
+    BOOL freeStrf     = FALSE;
     char   * legend   = NULL ;
+    BOOL freeLegend   = FALSE;
     char   * logFlags = NULL ;
 
     if (nbInputArgument(pvApiCtx) <= 0)
@@ -318,18 +320,44 @@ int sci_plot2d1_G(char * fname, int ptype, void *pvApiCtx)
     }
     if (get_strf_arg(pvApiCtx, fname, 4 + iskip, opts, &strf) == 0)
     {
+        FREE(style);
         return 0;
     }
+    freeStrf = isDefStrf(strf);
     if (get_legend_arg(pvApiCtx, fname, 5 + iskip, opts, &legend) == 0)
     {
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        FREE(style);
         return 0;
     }
+    freeLegend = isDefLegend(legend);
     if (get_rect_arg(pvApiCtx, fname, 6 + iskip, opts, &rect) == 0)
     {
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        FREE(style);
         return 0;
     }
     if (get_nax_arg(pvApiCtx, 7 + iskip, opts, &nax, &flagNax)==0)
     {
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
+        if (freeStrf)
+        {
+            freeAllocatedSingleString(strf);
+        }
+        FREE(style);
         return 0;
     }
 
@@ -337,6 +365,15 @@ int sci_plot2d1_G(char * fname, int ptype, void *pvApiCtx)
     {
         if (get_logflags_arg(pvApiCtx, fname, 8, opts, &logFlags) == 0)
         {
+            if (freeLegend)
+            {
+                freeAllocatedSingleString(legend);
+            }
+            if (freeStrf)
+            {
+                freeAllocatedSingleString(strf);
+            }
+            FREE(style);
             return 0;
         }
     }
@@ -356,6 +393,11 @@ int sci_plot2d1_G(char * fname, int ptype, void *pvApiCtx)
         }
         if (get_optional_int_arg(pvApiCtx, fname, 9, "frameflag", &frame, 1, opts) == 0)
         {
+            if (freeLegend)
+            {
+                freeAllocatedSingleString(legend);
+            }
+            FREE(style);
             return 0;
         }
         if (frame != &frame_def)
@@ -364,6 +406,11 @@ int sci_plot2d1_G(char * fname, int ptype, void *pvApiCtx)
         }
         if (get_optional_int_arg(pvApiCtx, fname, 9, "axesflag", &axes, 1, opts) == 0)
         {
+            if (freeLegend)
+            {
+                freeAllocatedSingleString(legend);
+            }
+            FREE(style);
             return 0;
         }
         if (axes != &axes_def)
@@ -381,6 +428,14 @@ int sci_plot2d1_G(char * fname, int ptype, void *pvApiCtx)
 
     // Allocated by sciGetStyle (get_style_arg function in GetCommandArg.c)
     FREE(style);
+    if (freeStrf)
+    {
+        freeAllocatedSingleString(strf);
+    }
+    if (freeLegend)
+    {
+        freeAllocatedSingleString(legend);
+    }
 
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
index 7f25253..8b39c39 100644 (file)
@@ -30,6 +30,7 @@
 #include "sciCall.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "DefaultCommandArg.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_plot3d(char * fname, void *pvApiCtx)
@@ -70,6 +71,7 @@ int sci_plot3d(char * fname, void *pvApiCtx)
     double* l2  = NULL;
     double* l3  = NULL;
     double* l3n = NULL;
+    BOOL freeLegend = FALSE;
 
     /*
     ** This overload the function to call demo script
@@ -334,12 +336,21 @@ int sci_plot3d(char * fname, void *pvApiCtx)
     {
         return 0;
     }
+    freeLegend = !isDefLegend(legend);
     if (get_optional_int_arg(pvApiCtx, fname, 7, "flag", &iflag, 3, opts) == 0)
     {
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
     if (get_optional_double_arg(pvApiCtx, fname, 8, "ebox", &ebox, 6, opts) == 0)
     {
+        if (freeLegend)
+        {
+            freeAllocatedSingleString(legend);
+        }
         return 0;
     }
 
@@ -365,6 +376,10 @@ int sci_plot3d(char * fname, void *pvApiCtx)
         FREE(l2);
     }
 
+    if (freeLegend)
+    {
+        freeAllocatedSingleString(legend);
+    }
     AssignOutputVariable(pvApiCtx, 1) = 0;
     ReturnArguments(pvApiCtx);
     return 0;
index f7bca22..ccc7bc8 100644 (file)
@@ -742,6 +742,7 @@ int createTitledBorder(void* _pvCtx, int* _piAddrList, int _iObjUID)
         sciErr = getListItemAddress(_pvCtx, piAddr6, 2, &piAddrFont);
         if (sciErr.iErr)
         {
+            freeAllocatedSingleString(pstTitle);
             return SET_PROPERTY_ERROR;
         }
 
index 59a5f85..30190d9 100644 (file)
@@ -97,16 +97,15 @@ 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)
             {
-                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
             if (getAllocatedSingleString(_pvCtx, piAddr2, &pstPos))
             {
-                freeAllocatedMatrixOfString(iRows, iCols, pstField);
                 return SET_PROPERTY_ERROR;
             }
 
@@ -135,7 +134,6 @@ 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;
             }
 
@@ -144,14 +142,12 @@ int set_constraints_property(void* _pvCtx, int iObjUID, void* _pvData, int value
             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;
             }
 
index 5cc90cd..e07c83b 100644 (file)
@@ -167,6 +167,7 @@ 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;