Coverity: GUI module Memory Leaks fixed 63/18063/10
Dhruv Khattar [Sat, 9 Apr 2016 05:53:13 +0000 (10:53 +0530)]
Change-Id: I3c19eb53eec127affb705d7ea59d4458fbfca02f

18 files changed:
scilab/modules/gui/sci_gateway/c/sci_figure.c
scilab/modules/gui/sci_gateway/c/sci_messagebox.c
scilab/modules/gui/sci_gateway/c/sci_setmenu.c
scilab/modules/gui/sci_gateway/c/sci_uicontrol.c
scilab/modules/gui/sci_gateway/c/sci_uigetfont.c
scilab/modules/gui/sci_gateway/c/sci_uimenu.c
scilab/modules/gui/sci_gateway/c/sci_unsetmenu.c
scilab/modules/gui/sci_gateway/c/sci_waitbar.c
scilab/modules/gui/sci_gateway/c/sci_x_choice.c
scilab/modules/gui/sci_gateway/c/sci_x_choose.c
scilab/modules/gui/sci_gateway/c/sci_x_choose_modeless.c
scilab/modules/gui/sci_gateway/c/sci_x_mdialog.c
scilab/modules/gui/sci_gateway/cpp/sci_datatip_manager_mode.cpp
scilab/modules/gui/sci_gateway/cpp/sci_getinstalledlookandfeels.cpp
scilab/modules/gui/sci_gateway/cpp/sci_toprint.cpp
scilab/modules/gui/src/cpp/SetUicontrolBackgroundColor.cpp
scilab/modules/gui/src/cpp/SetUicontrolPosition.cpp
scilab/modules/gui/src/cpp/SetUiobjectForegroundColor.cpp

index 46aac1e..724b5d0 100644 (file)
@@ -211,6 +211,7 @@ int sci_figure(char * fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i + 1);
+                freeAllocatedSingleString(pstProName);
                 return 1;
             }
 
@@ -234,7 +235,12 @@ int sci_figure(char * fname, void* pvApiCtx)
                     freeAllocatedSingleString(pstProName);
                 }
 
-                getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal);
+                if (getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal))
+                {
+                    Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, i + 1);
+                    freeAllocatedSingleString(pstProName);
+                    return 1;
+                }
 
                 if (stricmp(pstVal, "none") == 0)
                 {
@@ -264,7 +270,12 @@ int sci_figure(char * fname, void* pvApiCtx)
                     return 1;
                 }
 
-                getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal);
+                if (getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal))
+                {
+                    Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, i + 1);
+                    freeAllocatedSingleString(pstProName);
+                    return 1;
+                }
 
                 if (stricmp(pstVal, "none") == 0)
                 {
@@ -311,6 +322,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                 if (isDoubleType(pvApiCtx, piAddrData) == FALSE)
                 {
                     Scierror(999, _("%s: Wrong type for input argument #%d: A double vector expected.\n"), fname, i + 1);
+                    freeAllocatedSingleString(pstProName);
                     return 1;
                 }
 
@@ -318,6 +330,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                 if (iRows * iCols != 2)
                 {
                     Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "figure_size", 2);
+                    freeAllocatedSingleString(pstProName);
                     return 1;
                 }
             }
@@ -328,6 +341,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                 if (isDoubleType(pvApiCtx, piAddrData) == FALSE)
                 {
                     Scierror(999, _("%s: Wrong type for input argument #%d: A double vector expected.\n"), fname, i + 1);
+                    freeAllocatedSingleString(pstProName);
                     return 1;
                 }
 
@@ -335,6 +349,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                 if (iRows * iCols != 2)
                 {
                     Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "axes_size", 2);
+                    freeAllocatedSingleString(pstProName);
                     return 1;
                 }
             }
@@ -349,6 +364,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                     if (iRows * iCols != 4)
                     {
                         Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "position", 4);
+                        freeAllocatedSingleString(pstProName);
                         return 1;
                     }
 
@@ -360,13 +376,19 @@ int sci_figure(char * fname, void* pvApiCtx)
                     char* pstVal = NULL;
                     int iVal = 0;
 
-                    getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal);
+                    if (getAllocatedSingleString(pvApiCtx, piAddrData, &pstVal))
+                    {
+                        Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, i + 1);
+                        freeAllocatedSingleString(pstProName);
+                        return 1;
+                    }
 
                     iVal = sscanf(pstVal, "%lf|%lf|%lf|%lf", &val[0], &val[1], &val[2], &val[3]);
                     freeAllocatedSingleString(pstVal);
                     if (iVal != 4)
                     {
                         Scierror(999, _("Wrong value for '%s' property: string or 1 x %d real row vector expected.\n"), "position", 4);
+                        freeAllocatedSingleString(pstProName);
                         return 1;
                     }
 
@@ -376,6 +398,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                 else
                 {
                     Scierror(999, _("Wrong value for '%s' property: string or 1 x %d real row vector expected.\n"), "position", 4);
+                    freeAllocatedSingleString(pstProName);
                     return 1;
                 }
             }
@@ -419,7 +442,7 @@ int sci_figure(char * fname, void* pvApiCtx)
                     return 1;
                 }
             }
-
+            freeAllocatedSingleString(pstProName);
         }
 
         iFig = createFigure(bDockable, iMenubarType, iToolbarType, bDefaultAxes, bVisible);
@@ -477,8 +500,8 @@ int sci_figure(char * fname, void* pvApiCtx)
         sciErr = getVarAddressFromPosition(pvApiCtx, i + 1, &piAddrData);
         if (sciErr.iErr)
         {
-            freeAllocatedSingleString(pstProName);
             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i + 1);
+            freeAllocatedSingleString(pstProName);
             return 1;
         }
 
@@ -516,8 +539,8 @@ int sci_figure(char * fname, void* pvApiCtx)
                     {
                         if (getAllocatedSingleString(pvApiCtx, piAddrData, (char**)&_pvData))
                         {
-                            freeAllocatedSingleString(pstProName);
                             Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, 3);
+                            freeAllocatedSingleString(pstProName);
                             return 1;
                         }
                         iRows = (int)strlen((char*)_pvData);
@@ -526,7 +549,12 @@ int sci_figure(char * fname, void* pvApiCtx)
                     else
                     {
                         isMatrixOfString = 1;
-                        getAllocatedMatrixOfString(pvApiCtx, piAddrData, &iRows, &iCols, (char***)&_pvData);
+                        if (getAllocatedMatrixOfString(pvApiCtx, piAddrData, &iRows, &iCols, (char***)&_pvData))
+                        {
+                            Scierror(999, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 3);
+                            freeAllocatedSingleString(pstProName);
+                            return 1;
+                        }
                     }
                     break;
                 case sci_list :
@@ -634,7 +662,10 @@ int getStackArgumentAsBoolean(void* _pvCtx, int* _piAddr)
         {
             int ret = 0;
             char* pst = NULL;
-            getAllocatedSingleString(_pvCtx, _piAddr, &pst);
+            if (getAllocatedSingleString(_pvCtx, _piAddr, &pst))
+            {
+                return -1;
+            }
 
             if (stricmp(pst, "on") == 0)
             {
index aaf3f56..e5ab58b 100644 (file)
@@ -85,6 +85,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -92,12 +93,15 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (getAllocatedMatrixOfString(pvApiCtx, piAddrtitleAdr, &nbRow, &nbCol, &titleAdr))
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 2);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: string expected.\n"), fname, 2);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeAllocatedMatrixOfString(nbRow, nbCol, titleAdr);
                 return FALSE;
             }
             /* The title argument can be used to give the modal option */
@@ -110,6 +114,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 2);
+            freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
             return FALSE;
         }
     }
@@ -123,6 +128,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -130,6 +136,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (getAllocatedMatrixOfString(pvApiCtx, piAddriconAdr, &nbRow, &nbCol, &iconAdr))
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 3);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -160,6 +167,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string or string vector expected.\n"), fname, 3);
+            freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
             return FALSE;
         }
     }
@@ -173,6 +181,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -180,6 +189,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (getAllocatedMatrixOfString(pvApiCtx, piAddrbuttonsTextAdr, &nbRowButtons, &nbColButtons, &buttonsTextAdr))
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 4);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -196,6 +206,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string or string vector expected.\n"), fname, 3);
+            freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
             return FALSE;
         }
     }
@@ -209,6 +220,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -216,18 +228,21 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             if (getAllocatedMatrixOfString(pvApiCtx, piAddrmodalOptionAdr, &nbRow, &nbCol, &modalOptionAdr))
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 5);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: string expected.\n"), fname, 5);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return FALSE;
             }
         }
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 5);
+            freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
             return FALSE;
         }
     }
index 740bb59..3cb5b49 100644 (file)
@@ -148,6 +148,7 @@ int sci_setmenu(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -157,6 +158,7 @@ int sci_setmenu(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 2);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -164,6 +166,7 @@ int sci_setmenu(char *fname, void* pvApiCtx)
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 2);
+                freeAllocatedSingleString(menuNameAdr);
                 return FALSE;
             }
 
@@ -238,6 +241,7 @@ int sci_setmenu(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -247,6 +251,7 @@ int sci_setmenu(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 3);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -254,12 +259,14 @@ int sci_setmenu(char *fname, void* pvApiCtx)
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 3);
+                freeAllocatedSingleString(menuNameAdr);
                 return FALSE;
             }
         }
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 3);
+            freeAllocatedSingleString(menuNameAdr);
             return FALSE;
         }
 
index 6d59cc9..9c93c1a 100644 (file)
@@ -494,6 +494,7 @@ int sci_uicontrol(char *fname, void* pvApiCtx)
                         {
                             printError(&sciErr, 0);
                             FREE(propertiesValuesIndices);
+                            freeAllocatedSingleString(styleProperty);
                             return 1;
                         }
 
@@ -501,6 +502,7 @@ int sci_uicontrol(char *fname, void* pvApiCtx)
                         {
                             Scierror(202, _("%s: Wrong type for argument #%d: string or boolean expected.\n"), fname, propertiesValuesIndices[scrollable_property]);
                             FREE(propertiesValuesIndices);
+                            freeAllocatedSingleString(styleProperty);
                             return 1;
                         }
 
@@ -510,6 +512,7 @@ int sci_uicontrol(char *fname, void* pvApiCtx)
                             {
                                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[scrollable_property]);
                                 FREE(propertiesValuesIndices);
+                                freeAllocatedSingleString(styleProperty);
                                 return 1;
                             }
 
@@ -525,6 +528,7 @@ int sci_uicontrol(char *fname, void* pvApiCtx)
                             if (getScalarBoolean(pvApiCtx, piAddr, &iScroll))
                             {
                                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[scrollable_property]);
+                                freeAllocatedSingleString(styleProperty);
                                 FREE(propertiesValuesIndices);
                                 return 1;
                             }
index 263a781..6d1492a 100644 (file)
@@ -246,7 +246,11 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
                 return 1;
             }
-
+        }
+        
+        if (selectedFontName)
+        {
+            freeAllocatedSingleString(selectedFontName);
         }
 
         if (nbOutputArgument(pvApiCtx) >= 2)
@@ -290,6 +294,10 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
     }
     else /* The user canceled */
     {
+        if (selectedFontName)
+        {
+            freeAllocatedSingleString(selectedFontName);
+        }
         nbRow = 0;
         nbCol = 0;
         if (nbOutputArgument(pvApiCtx) >= 1)
@@ -345,11 +353,6 @@ int sci_uigetfont(char *fname, void* pvApiCtx)
     AssignOutputVariable(pvApiCtx, 3) = nbInputArgument(pvApiCtx) + 3;
     AssignOutputVariable(pvApiCtx, 4) = nbInputArgument(pvApiCtx) + 4;
 
-    if (selectedFontName)
-    {
-        freeAllocatedSingleString(selectedFontName);
-    }
-
     if (fontNameSize)
     {
         freeAllocatedMatrixOfString(nbRow, nbCol, fontNameAdr);
index 2f70355..5fb6a5f 100644 (file)
@@ -179,6 +179,7 @@ int sci_uimenu(char *fname, void *pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeAllocatedSingleString(propertyName);
             return 1;
         }
 
@@ -201,6 +202,7 @@ int sci_uimenu(char *fname, void *pvApiCtx)
                     {
                         printError(&sciErr, 0);
                         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, iPropertyValuePositionIndex);
+                        freeAllocatedSingleString(propertyName);
                         return 1;
                     }
 
@@ -213,6 +215,7 @@ int sci_uimenu(char *fname, void *pvApiCtx)
                     if (getAllocatedSingleString(pvApiCtx, piAddrValue, &pstValue))
                     {
                         Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, iPropertyValuePositionIndex);
+                        freeAllocatedSingleString(propertyName);
                         return 1;
                     }
 
@@ -230,6 +233,7 @@ int sci_uimenu(char *fname, void *pvApiCtx)
                     {
                         printError(&sciErr, 0);
                         Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, iPropertyValuePositionIndex);
+                        freeAllocatedSingleString(propertyName);
                         return 1;
                     }
                     setStatus = callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), phValues, sci_handles, nbRow, nbCol, propertyName);
@@ -253,6 +257,7 @@ int sci_uimenu(char *fname, void *pvApiCtx)
         if (setStatus == SET_PROPERTY_ERROR)
         {
             Scierror(999, _("%s: Could not set property '%s'.\n"), fname, propertyName);
+            freeAllocatedSingleString(propertyName);
             return FALSE;
         }
 
index acfe10a..9a3eccb 100644 (file)
@@ -147,6 +147,7 @@ int sci_unsetmenu(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -156,6 +157,7 @@ int sci_unsetmenu(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 2);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -163,6 +165,7 @@ int sci_unsetmenu(char *fname, void* pvApiCtx)
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 2);
+                freeAllocatedSingleString(menuNameAdr);
                 return FALSE;
             }
 
@@ -236,6 +239,7 @@ int sci_unsetmenu(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
@@ -245,18 +249,21 @@ int sci_unsetmenu(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 3);
+                freeAllocatedSingleString(menuNameAdr);
                 return 1;
             }
 
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 3);
+                freeAllocatedSingleString(menuNameAdr);
                 return FALSE;
             }
         }
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 3);
+            freeAllocatedSingleString(menuNameAdr);
             return FALSE;
         }
 
index 3ced638..2dde37b 100644 (file)
@@ -242,6 +242,7 @@ int sci_waitbar(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -251,12 +252,14 @@ int sci_waitbar(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 2);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
             if (nbRow * nbCol != 1)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' handle expected.\n"), fname, 2, "Waitbar");
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return FALSE;
             }
 
@@ -265,6 +268,7 @@ int sci_waitbar(char *fname, void* pvApiCtx)
             if (iWaitbarUID == 0)
             {
                 Scierror(999, _("%s: Wrong value for input argument #%d: A valid '%s' handle expected.\n"), fname, 2, "Waitbar");
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return FALSE;
             }
 
@@ -337,6 +341,7 @@ int sci_waitbar(char *fname, void* pvApiCtx)
             if (sciErr.iErr)
             {
                 printError(&sciErr, 0);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
@@ -346,6 +351,7 @@ int sci_waitbar(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 3);
+                freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
                 return 1;
             }
 
index 4adcb1f..9995c43 100644 (file)
@@ -91,6 +91,7 @@ int sci_x_choice(char *fname, void* pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            FREE(defaultValuesInt);
             return 1;
         }
 
@@ -98,6 +99,7 @@ int sci_x_choice(char *fname, void* pvApiCtx)
         if (getAllocatedMatrixOfString(pvApiCtx, piAddrlabelsAdr, &nbRow, &nbCol, &labelsAdr))
         {
             Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 2);
+            FREE(defaultValuesInt);
             return 1;
         }
 
@@ -126,6 +128,7 @@ int sci_x_choice(char *fname, void* pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            FREE(defaultValuesInt);
             return 1;
         }
 
@@ -133,13 +136,15 @@ int sci_x_choice(char *fname, void* pvApiCtx)
         if (getAllocatedMatrixOfString(pvApiCtx, piAddrlineLabelsAdr, &nbRowLineLabels, &nbColLineLabels, &lineLabelsAdr))
         {
             Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 3);
+            FREE(defaultValuesInt);
             return 1;
         }
 
         if (nbRow != 1 && nbCol != 1)
         {
-            freeAllocatedMatrixOfString(nbRowLineLabels, nbColLineLabels, lineLabelsAdr);
             Scierror(999, _("%s: Wrong size for input argument #%d: Vector of strings expected.\n"), fname, 3);
+            freeAllocatedMatrixOfString(nbRowLineLabels, nbColLineLabels, lineLabelsAdr);
+            FREE(defaultValuesInt);
             return FALSE;
         }
         setMessageBoxLineLabels(messageBoxID, lineLabelsAdr, nbColLineLabels * nbRowLineLabels);
@@ -148,11 +153,13 @@ int sci_x_choice(char *fname, void* pvApiCtx)
     else
     {
         Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 3);
+        FREE(defaultValuesInt);
         return FALSE;
     }
 
     /* Default selected buttons */
     setMessageBoxDefaultSelectedButtons(messageBoxID, defaultValuesInt, nbRowDefaultValues * nbColDefaultValues);
+    FREE(defaultValuesInt);
 
     /* Display it and wait for a user input */
     messageBoxDisplayAndWait(messageBoxID);
@@ -193,8 +200,6 @@ int sci_x_choice(char *fname, void* pvApiCtx)
         /* TO DO : do a delete []  getMessageBoxUserSelectedButtons */
     }
 
-    FREE(defaultValuesInt);
-
     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
     ReturnArguments(pvApiCtx);
     return TRUE;
index a4d02e3..87a4681 100644 (file)
@@ -73,6 +73,7 @@ int sci_x_choose(char *fname, void* pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
             return 1;
         }
 
@@ -87,6 +88,7 @@ int sci_x_choose(char *fname, void* pvApiCtx)
     else
     {
         Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 2);
+        freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
         return FALSE;
     }
 
index 8f4fa93..4815fd9 100644 (file)
@@ -73,22 +73,23 @@ int sci_x_choose_modeless(char *fname, void* pvApiCtx)
         if (sciErr.iErr)
         {
             printError(&sciErr, 0);
+            freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
             return 1;
         }
 
         // Retrieve a matrix of string at position 2.
         if (getAllocatedMatrixOfString(pvApiCtx, piAddrmessageAdr, &nbRow, &nbCol, &messageAdr))
         {
-            freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
             Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 2);
+            freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
             return 1;
         }
 
     }
     else
     {
-        freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
         Scierror(999, _("%s: Wrong type for input argument #%d: Vector of strings expected.\n"), fname, 2);
+        freeAllocatedMatrixOfString(nbRowItems, nbColItems, itemsAdr);
         return FALSE;
     }
 
index f51f407..ea12c7d 100644 (file)
@@ -204,6 +204,7 @@ int sci_x_mdialog(char *fname, void* pvApiCtx)
             if ((nbRowDefaultValues != nbRowLineLabels * nbColLineLabels) || (nbColDefaultValues != nbRowColumnLabels * nbColColumnLabels))
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: %d x %d matrix of strings expected.\n"), fname, 4, nbRowLineLabels * nbColLineLabels, nbRowColumnLabels * nbColColumnLabels);
+                freeArrayOfString(defaultValuesAdr, nbColDefaultValues * nbRowDefaultValues);
                 return FALSE;
             }
             setMessageBoxDefaultInput(messageBoxID, defaultValuesAdr, nbColDefaultValues * nbRowDefaultValues);
index 27561db..be2dc90 100644 (file)
@@ -113,6 +113,7 @@ int sci_datatip_manager_mode(char *fname, void* pvApiCtx)
                 if (sciErr.iErr)
                 {
                     printError(&sciErr, 0);
+                    free(pstData);
                     return 1;
                 }
                 if (strcmp("on", pstData) == 0 || strcmp("T", pstData) == 0 || strcmp("1", pstData) == 0)
@@ -223,6 +224,7 @@ int sci_datatip_manager_mode(char *fname, void* pvApiCtx)
                 if (sciErr.iErr)
                 {
                     printError(&sciErr, 0);
+                    free(pstData);
                     return 1;
                 }
                 if (strcmp("on", pstData) == 0 || strcmp("T", pstData) == 0 || strcmp("1", pstData) == 0)
index 01b2cd7..cb1215a 100644 (file)
@@ -56,29 +56,28 @@ int sci_getinstalledlookandfeels(char *fname, void* pvApiCtx)
         nbCol = 1;
 
         sciErr = createMatrixOfString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbElems, nbCol, lookandfeels);
-        if (sciErr.iErr)
-        {
-            printError(&sciErr, 0);
-            Scierror(999, _("%s: Memory allocation error.\n"), fname);
-            return 1;
-        }
 
         if (lookandfeels)
         {
-            int i = 0;
-
-            for (i = 0; i < nbElems; i++)
+            for (int i = 0; i < nbElems; i++)
             {
                 if (lookandfeels[i])
                 {
-                    delete[]lookandfeels[i];
+                    delete[] lookandfeels[i];
                 }
             }
-            delete[]lookandfeels;
+            delete[] lookandfeels;
             lookandfeels = NULL;
         }
         delete lnf;
 
+        if (sciErr.iErr)
+        {
+            printError(&sciErr, 0);
+            Scierror(999, _("%s: Memory allocation error.\n"), fname);
+            return 1;
+        }
+
         AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
         returnArguments(pvApiCtx);
     }
index d7e941c..f45ab83 100644 (file)
@@ -251,6 +251,7 @@ static int sci_toprint_two_rhs(void* _pvCtx, const char *fname)
                 {
                     printError(&sciErr, 0);
                     Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
+                    FREE(lenStVarOne);
                     return 1;
                 }
 
@@ -262,9 +263,8 @@ static int sci_toprint_two_rhs(void* _pvCtx, const char *fname)
                 pStVarOne = (char **)MALLOC(sizeof(char *) * mnOne);
                 if (pStVarOne == NULL)
                 {
-                    FREE(lenStVarOne);
-                    lenStVarOne = NULL;
                     Scierror(999, _("%s: No more memory.\n"), fname);
+                    FREE(lenStVarOne);
                     return 1;
                 }
 
@@ -273,36 +273,28 @@ static int sci_toprint_two_rhs(void* _pvCtx, const char *fname)
                     pStVarOne[i] = (char *)MALLOC(sizeof(char) * (lenStVarOne[i] + 1));
                     if (pStVarOne[i] == NULL)
                     {
-                        freeArrayOfString(pStVarOne, i);
-                        if (lenStVarOne)
-                        {
-                            FREE(lenStVarOne);
-                            lenStVarOne = NULL;
-                        }
                         Scierror(999, _("%s: No more memory.\n"), fname);
+                        freeArrayOfString(pStVarOne, i);
+                        FREE(lenStVarOne);
                         return 1;
                     }
                 }
 
                 sciErr = getMatrixOfString(_pvCtx, piAddressVarOne, &mOne, &nOne, lenStVarOne, pStVarOne);
-                if (lenStVarOne)
-                {
-                    FREE(lenStVarOne);
-                    lenStVarOne = NULL;
-                }
+                FREE(lenStVarOne);
                 if (sciErr.iErr)
                 {
-                    freeArrayOfString(pStVarOne, mnOne);
                     printError(&sciErr, 0);
                     Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
+                    freeArrayOfString(pStVarOne, mnOne);
                     return 1;
                 }
 
                 lines = (char *)MALLOC((lenLineToPrint + 1) * sizeof(char));
                 if (lines == NULL)
                 {
-                    freeArrayOfString(pStVarOne, mnOne);
                     Scierror(999, _("%s: No more memory.\n"), fname);
+                    freeArrayOfString(pStVarOne, mnOne);
                     return 1;
                 }
 
index ec6c4d3..f8e54a8 100644 (file)
@@ -49,6 +49,7 @@ int SetUicontrolBackgroundColor(void* _pvCtx, int iObjUID, void* _pvData, int va
         {
             /* Wrong string format */
             Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "BackgroundColor");
+            delete[] allColors;
             return SET_PROPERTY_ERROR;
         }
 
@@ -75,6 +76,10 @@ int SetUicontrolBackgroundColor(void* _pvCtx, int iObjUID, void* _pvData, int va
     if (!checkColorRange(allColors[0], allColors[1], allColors[2]))
     {
         Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: Numbers between 0 and 1 expected.\n")), "BackgroundColor");
+        if (valueType == sci_strings)
+        {
+            delete[] allColors;
+        }
         return SET_PROPERTY_ERROR;
     }
 
index 6bd603a..232bdd2 100644 (file)
@@ -44,6 +44,7 @@ int SetUicontrolPosition(int iObjUID, void* pvData, int valueType, int nbRow, in
         if (nbValues != 4)
         {
             Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: string or 1 x %d real row vector expected.\n")), "Position", 4);
+            delete[] position;
             return SET_PROPERTY_ERROR;
         }
     }
@@ -81,6 +82,10 @@ int SetUicontrolPosition(int iObjUID, void* pvData, int valueType, int nbRow, in
         if (status == FALSE)
         {
             Scierror(999, const_cast<char*>(_("'%s' property does not exist for this handle.\n")), "Position");
+            if (valueType == sci_strings)
+            {
+                delete[] position;
+            }
             return SET_PROPERTY_ERROR;
         }
         status = setGraphicObjectProperty(iObjUID, __GO_AXES_SIZE__, figureSize, jni_int_vector, 2);
index 4885296..1c51e86 100644 (file)
@@ -43,6 +43,7 @@ int SetUiobjectForegroundColor(void* _pvCtx, int iObjUID, void* _pvData, int val
         if (nbValues != 3) /* Wrong format string */
         {
             Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "ForegroundColor");
+            delete[] allColors;
             return SET_PROPERTY_ERROR;
         }
 
@@ -67,6 +68,10 @@ int SetUiobjectForegroundColor(void* _pvCtx, int iObjUID, void* _pvData, int val
     if (!checkColorRange(allColors[0], allColors[1], allColors[2]))
     {
         Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: Numbers between 0 and 1 expected.\n")), "ForegroundColor");
+        if (valueType == sci_strings)
+        {
+            delete[] allColors;
+        }
         return SET_PROPERTY_ERROR;
     }