*Bug #13856 fixed - messagebox updated. 96/18696/2
Adeline CARNIS [Thu, 17 Nov 2016 14:06:20 +0000 (15:06 +0100)]
Change-Id: I88f01f62ba77a442c0d764249d7eebfa6047ee37

scilab/CHANGES.md
scilab/modules/gui/sci_gateway/c/sci_messagebox.c
scilab/modules/gui/tests/nonreg_tests/bug_13856.tst [new file with mode: 0644]

index 6df46e9..243a7e9 100644 (file)
@@ -351,6 +351,7 @@ Bug Fixes
 * [#13620](http://bugzilla.scilab.org/show_bug.cgi?id=13620): `dos` called with a vector as input crashed.
 * [#13651](http://bugzilla.scilab.org/show_bug.cgi?id=13651): It was not possible to `copy` an axes into an uicontrol frame.
 * [#13757](http://bugzilla.scilab.org/show_bug.cgi?id=13757): The toolbox menu dit not load properly ATOMS modules not autoloaded.
+* [#13856](http://bugzilla.scilab.org/show_bug.cgi?id=13856): `messagebox` crashed under Windows in 5.5 Scilab version and updated in version 6.
 * [#13878](http://bugzilla.scilab.org/show_bug.cgi?id=13878): tokens([]) returns [].
 * [#13895](http://bugzilla.scilab.org/show_bug.cgi?id=13895): p.a.h = 1; p.b.h = 3; p(:).h  CRASH
 * [#13990](http://bugzilla.scilab.org/show_bug.cgi?id=13990): `warning` with localization enabled some memory corruption
index e5ab58b..f91c817 100644 (file)
@@ -22,6 +22,8 @@
 #include "os_string.h"
 #include "messageboxoptions.h"
 
+void freeVariable(int _iRows, int _iCols, char** _pstData, char** _pstData1, int _iRows2, int _iCols2, char** _pstData2, char** _pstData3);
+
 /*--------------------------------------------------------------------------*/
 int sci_messagebox(char *fname, void* pvApiCtx)
 {
@@ -129,6 +131,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return 1;
             }
 
@@ -137,6 +140,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 3);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return 1;
             }
 
@@ -154,6 +158,8 @@ int sci_messagebox(char *fname, void* pvApiCtx)
                     nbRowButtons = nbRow;
                     nbColButtons = nbCol;
                     iconAdr = NULL;
+                    nbRow = 1;
+                    nbCol = 1;
                 }
             }
             else  /* More than one string --> buttons names */
@@ -162,12 +168,15 @@ int sci_messagebox(char *fname, void* pvApiCtx)
                 nbRowButtons = nbRow;
                 nbColButtons = nbCol;
                 iconAdr = NULL;
+                nbRow = 1;
+                nbCol = 1;
             }
         }
         else
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string or string vector expected.\n"), fname, 3);
             freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+            freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
             return FALSE;
         }
     }
@@ -182,6 +191,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return 1;
             }
 
@@ -190,10 +200,11 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 4);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return 1;
             }
 
-            if (nbRow * nbCol == 1)
+            if (nbRowButtons * nbColButtons == 1)
             {
                 /* The buttons names argument can be used to give the modal option */
                 if (isModalOption(buttonsTextAdr[0]))
@@ -207,6 +218,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string or string vector expected.\n"), fname, 3);
             freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+            freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
             return FALSE;
         }
     }
@@ -221,6 +233,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 printError(&sciErr, 0);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return 1;
             }
 
@@ -229,6 +242,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 5);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return 1;
             }
 
@@ -236,6 +250,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
             {
                 Scierror(999, _("%s: Wrong size for input argument #%d: string expected.\n"), fname, 5);
                 freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+                freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
                 return FALSE;
             }
         }
@@ -243,6 +258,7 @@ int sci_messagebox(char *fname, void* pvApiCtx)
         {
             Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 5);
             freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr);
+            freeVariable(nbRow, nbCol, titleAdr, iconAdr, nbRowButtons, nbColButtons, buttonsTextAdr, modalOptionAdr);
             return FALSE;
         }
     }
@@ -322,3 +338,30 @@ int sci_messagebox(char *fname, void* pvApiCtx)
     return TRUE;
 }
 /*--------------------------------------------------------------------------*/
+
+void freeVariable(int _iRows, int _iCols, char** _pstData, char** _pstData1, int _iRows2, int _iCols2, char** _pstData2, char** _pstData3)
+{
+    // tilteAdr
+    if (_pstData != NULL)
+    {
+        freeAllocatedMatrixOfString(_iRows, _iCols, _pstData);
+    }
+
+    // iconAdr
+    if (_pstData1 != NULL)
+    {
+        freeAllocatedMatrixOfString(_iRows, _iCols, _pstData1);
+    }
+
+    // buttonsTextAdr
+    if (_pstData2 != NULL)
+    {
+        freeAllocatedMatrixOfString(_iRows2, _iCols2, _pstData2);
+    }
+
+    // modalOptionAdr
+    if (_pstData3 != NULL)
+    {
+        freeAllocatedMatrixOfString(_iRows, _iCols, _pstData3);
+    }
+}
\ No newline at end of file
diff --git a/scilab/modules/gui/tests/nonreg_tests/bug_13856.tst b/scilab/modules/gui/tests/nonreg_tests/bug_13856.tst
new file mode 100644 (file)
index 0000000..1567fb2
--- /dev/null
@@ -0,0 +1,22 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2016 - Scilab Enterprises - Adeline CARNIS
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- TEST WITH GRAPHIC -->
+// <-- INTERACTIVE TEST -->
+//
+// <-- Non-regression test for bug 13856 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13856
+//
+// <-- Short Description -->
+// messagebox makes Scilab 5.5 family crashed under Windows.
+
+messagebox("msg", "modal", ["1", "2"]);
+messagebox("msg", "messagebox title", "modal");
+messagebox("msg", "modal", "question");
+messagebox("msg", "messagebox title", "modal", ["1", "2"]);