* Bug #13441 fixed - Scilab crashed when uicontrol was called with a string for borde... 84/14984/5
Vladislav TRUBKIN [Wed, 6 Aug 2014 09:06:58 +0000 (11:06 +0200)]
Change-Id: I8e7d50a3561f61f9274a82f0b07273a1f950117d

scilab/CHANGES_5.5.X
scilab/modules/graphics/src/c/getHandleProperty/set_border_property.c
scilab/modules/graphics/tests/nonreg_tests/bug_13441.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/nonreg_tests/bug_13441.tst [new file with mode: 0644]

index 3e48898..e502587 100644 (file)
@@ -164,6 +164,8 @@ Scilab Bug Fixes
 
 * Bug #13438 fixed - drawaxis did not return the handle of the created axis.
 
+* Bug #13441 fixed - Scilab crashed when uicontrol was called with a string for border property.
+
 * Bug #13459 fixed - A warning message about libcurl.so version was displayed at Scilab startup.
 
 * Bug #13471 fixed - ilib_build_jar infinite loop when used on an empty directory fixed.
index 6411ea5..cb30cf0 100644 (file)
@@ -45,8 +45,13 @@ int createMatteBorder(void* _pvCtx, int* _piAddrList, int _iObjUID);
 /*------------------------------------------------------------------------*/
 int set_border_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int nbRow, int nbCol)
 {
-    //[] or tlist
-    if (valueType == sci_matrix)
+
+    if ((valueType != sci_tlist && valueType != sci_matrix) || (valueType == sci_matrix && (nbRow != 0 || nbCol != 0)))
+    {
+        Scierror(999, _("Wrong type for '%s' property: An empty matrix or a tlist expected.\n"), "border");
+        return SET_PROPERTY_ERROR;
+    }
+    else if (valueType == sci_matrix)
     {
         return clearBorder(iObjUID);
     }
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13441.dia.ref b/scilab/modules/graphics/tests/nonreg_tests/bug_13441.dia.ref
new file mode 100644 (file)
index 0000000..07ba565
--- /dev/null
@@ -0,0 +1,78 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Vladislav TRUBKIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 13441 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13441
+//
+// <-- Short Description -->
+// Scilab crashes when giving a string for border property of the uicontrol
+//
+f = figure("figure_name", "FIGURE", ...
+"dockable", "off", ...
+"axes_size", [300,300], ...
+"infobar_visible", "off", ...
+"toolbar", "none", ...
+"menubar_visible", "off", ...
+"menubar", "none", ...
+"default_axes", "off", ...
+"layout", "border");
+mainFrame = uicontrol(f, ...
+"style", "frame", ...
+"layout", "border");
+font = createBorderFont("Serif", 12, "bold");
+constraint = createConstraints("border", "left", [150,300]);
+leftFrame = uicontrol(mainFrame, ...
+"style", "frame", ...
+"layout", "gridbag", ...
+"constraints", constraint, ...
+"tag", "leftFrame");
+border = createBorder("titled", createBorder("etched"), "Frame title", "left", "top", font, "blue");
+constraint = createConstraints("gridbag", [1 1 1 1], [1 0.1], "both", "left");
+// OK test
+// mlist
+assert_checkequal(execstr("h = uicontrol(leftFrame," +...
+"""style"", ""frame""," +...
+"""border"", border," +...
+"""layout"", ""gridbag""," +...
+"""constraints"", constraint);", "errcatch"), 0);
+assert_checkequal(execstr("h = uicontrol(leftFrame," +...
+"""style"", ""frame""," +...
+"""border"", border," +...
+"""layout"", ""grid""," +...
+"""constraints"", constraint);", "errcatch"), 0);
+// []
+assert_checkequal(execstr("h = uicontrol(leftFrame," +...
+"""style"", ""frame""," +...
+"""border"", []," +...
+"""layout"", ""grid""," +...
+"""constraints"", constraint);", "errcatch"), 0);
+// KO test
+lstrFromSetBorder = gettext("Wrong type for "'%s"' property: An empty matrix or a tlist expected.\n");
+errmsgFromSetBorder = msprintf(lstrFromSetBorder, "border");
+lstrFromUicontrol =  gettext("%s: Could not set property "'%s"'.\n");
+errmsgFromUicontrol = msprintf(lstrFromUicontrol, "uicontrol", "border");
+checkValues = list("border", [1, 2, 3, 4], [1 ,2; 1, 2], ...
+[1:10], [1:10]', list(), ...
+list(1, 2, 3), mlist(["MLIST", "Name", "Value"], ...
+["one","two", "three"], [1, 2, 3]));
+for i = 1:8
+    if i < 6 then
+        assert_checkerror("h = uicontrol(leftFrame," +...
+        """style"", ""frame""," +...
+        """border"", checkValues(i)," +...
+        """layout"", ""gridbag""," +...
+        """constraints"", constraint);", errmsgFromSetBorder);
+    else
+        assert_checkerror("h = uicontrol(leftFrame," +...
+        """style"", ""frame""," +...
+        """border"", checkValues(i)," +...
+        """layout"", ""gridbag""," +...
+        """constraints"", constraint);", errmsgFromUicontrol);
+    end
+end
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_13441.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_13441.tst
new file mode 100644 (file)
index 0000000..0eaedf9
--- /dev/null
@@ -0,0 +1,84 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Vladislav TRUBKIN
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 13441 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13441
+//
+// <-- Short Description -->
+// Scilab crashes when giving a string for border property of the uicontrol
+//
+f = figure("figure_name", "FIGURE", ...
+"dockable", "off", ...
+"axes_size", [300,300], ...
+"infobar_visible", "off", ...
+"toolbar", "none", ...
+"menubar_visible", "off", ...
+"menubar", "none", ...
+"default_axes", "off", ...
+"layout", "border");
+
+mainFrame = uicontrol(f, ...
+"style", "frame", ...
+"layout", "border");
+
+font = createBorderFont("Serif", 12, "bold");
+constraint = createConstraints("border", "left", [150,300]);
+leftFrame = uicontrol(mainFrame, ...
+"style", "frame", ...
+"layout", "gridbag", ...
+"constraints", constraint, ...
+"tag", "leftFrame");
+
+border = createBorder("titled", createBorder("etched"), "Frame title", "left", "top", font, "blue");
+constraint = createConstraints("gridbag", [1 1 1 1], [1 0.1], "both", "left");
+
+// OK test
+// mlist
+assert_checkequal(execstr("h = uicontrol(leftFrame," +...
+"""style"", ""frame""," +...
+"""border"", border," +...
+"""layout"", ""gridbag""," +...
+"""constraints"", constraint);", "errcatch"), 0);
+assert_checkequal(execstr("h = uicontrol(leftFrame," +...
+"""style"", ""frame""," +...
+"""border"", border," +...
+"""layout"", ""grid""," +...
+"""constraints"", constraint);", "errcatch"), 0);
+// []
+assert_checkequal(execstr("h = uicontrol(leftFrame," +...
+"""style"", ""frame""," +...
+"""border"", []," +...
+"""layout"", ""grid""," +...
+"""constraints"", constraint);", "errcatch"), 0);
+
+// KO test
+lstrFromSetBorder = gettext("Wrong type for "'%s"' property: An empty matrix or a tlist expected.\n");
+errmsgFromSetBorder = msprintf(lstrFromSetBorder, "border");
+lstrFromUicontrol =  gettext("%s: Could not set property "'%s"'.\n");
+errmsgFromUicontrol = msprintf(lstrFromUicontrol, "uicontrol", "border");
+
+checkValues = list("border", [1, 2, 3, 4], [1 ,2; 1, 2], ...
+[1:10], [1:10]', list(), ...
+list(1, 2, 3), mlist(["MLIST", "Name", "Value"], ...
+["one","two", "three"], [1, 2, 3]));
+for i = 1:8
+    if i < 6 then
+        assert_checkerror("h = uicontrol(leftFrame," +...
+        """style"", ""frame""," +...
+        """border"", checkValues(i)," +...
+        """layout"", ""gridbag""," +...
+        """constraints"", constraint);", errmsgFromSetBorder);
+    else
+        assert_checkerror("h = uicontrol(leftFrame," +...
+        """style"", ""frame""," +...
+        """border"", checkValues(i)," +...
+        """layout"", ""gridbag""," +...
+        """constraints"", constraint);", errmsgFromUicontrol);
+    end
+end