* Bug #14779 fixed - When used logarithmic mode using coordinates <= 0, xsegs crashed... 54/18654/2
Adeline CARNIS [Tue, 8 Nov 2016 11:35:36 +0000 (12:35 +0100)]
Change-Id: If2e53741f91eec58fa85401ceae52807a6a33b29

scilab/CHANGES.md
scilab/modules/graphics/src/c/sciCall.c
scilab/modules/graphics/tests/nonreg_tests/bug_14779.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/nonreg_tests/bug_14779.tst [new file with mode: 0644]

index 243a7e9..230ff69 100644 (file)
@@ -390,6 +390,7 @@ Bug Fixes
 * [#14694](http://bugzilla.scilab.org/show_bug.cgi?id=14694): The list of named colors was misaligned and poorly rendered in `help color_list`
 * [#14710](http://bugzilla.scilab.org/show_bug.cgi?id=14710): fullpath(TMPDIR+...) was bugged on MacOS
 * [#14714](http://bugzilla.scilab.org/show_bug.cgi?id=14714): Crash/Leak when deleting datatip
+* [#14779](http://bugzilla.scilab.org/show_bug.cgi?id=14779): When used logarithmic mode using coordinates <=0, xsegs crashed Scilab.
 * [#14784](http://bugzilla.scilab.org/show_bug.cgi?id=14784): Setting field of graphics handle using children($) failed.
 * [#14796](http://bugzilla.scilab.org/show_bug.cgi?id=14796): `ind2sub(dims, [])` returns [] in version 6. Warnings due to a `[]+1` operation have been removed.
 * [#14775](http://bugzilla.scilab.org/show_bug.cgi?id=14775): load empty (0 bytes) .sod File crashes scilab
index c7a696b..e787ce5 100644 (file)
@@ -982,6 +982,8 @@ static void updateXYDataBounds(int iSubwinUID, double rect[6])
 {
     int firstPlot = 0;
     int * piFirstPlot = &firstPlot;
+    int iLogFlag = 0;
+    int* piLogFlag = &iLogFlag;
 
     getGraphicObjectProperty(iSubwinUID, __GO_FIRST_PLOT__, jni_bool, (void **)&piFirstPlot);
     if (firstPlot)
@@ -1006,6 +1008,33 @@ static void updateXYDataBounds(int iSubwinUID, double rect[6])
         rect[5] = dataBounds[5];
     }
 
+    getGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LOG_FLAG__, jni_bool, (void **)&piLogFlag);
+
+    if ((rect[0] <= 0. || rect[1] <= 0.) && iLogFlag)
+    {
+        Scierror(999, _("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "x");
+        return 0;
+    }
+
+    getGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LOG_FLAG__, jni_bool, (void **)&piLogFlag);
+
+    if ((rect[2] <= 0. || rect[3] <= 0.) && iLogFlag)
+    {
+        Scierror(999, _("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "y");
+        return 0;
+    }
+
+    if (!firstPlot)
+    {
+        getGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LOG_FLAG__, jni_bool, (void **)&piLogFlag);
+
+        if ((rect[4] <= 0. || rect[5] <= 0.) && iLogFlag)
+        {
+            Scierror(999, _("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "z");
+            return 0;
+        }
+    }
+
     setGraphicObjectProperty(iSubwinUID, __GO_DATA_BOUNDS__, rect, jni_double_vector, 6);
 }
 /*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_14779.dia.ref b/scilab/modules/graphics/tests/nonreg_tests/bug_14779.dia.ref
new file mode 100644 (file)
index 0000000..4289a18
--- /dev/null
@@ -0,0 +1,28 @@
+// =============================================================================
+// 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 -->
+// <-- Non-regression test for bug 14779 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14779
+//
+// <-- Short Description -->
+// When used in logarithmic mode using coordinates <=0, xsegs crashed Scilab.
+clf;
+ax=gca();
+ax.data_bounds=[0.01 0.01;100 100];
+ax.log_flags="ll";
+ax.axes_visible="on";
+str = "xsegs([-1;0],[0;0],1)";
+assert_checkfalse(execstr(str   ,"errcatch") == 0);
+refMsg = msprintf(_("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "x");
+assert_checkerror(str, refMsg);
+ax.log_flags="nl";
+str = "xsegs([-1;0],[0;0],1)";
+assert_checkfalse(execstr(str   ,"errcatch") == 0);
+refMsg = msprintf(_("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "y");
+assert_checkerror(str, refMsg);
diff --git a/scilab/modules/graphics/tests/nonreg_tests/bug_14779.tst b/scilab/modules/graphics/tests/nonreg_tests/bug_14779.tst
new file mode 100644 (file)
index 0000000..43d2c0f
--- /dev/null
@@ -0,0 +1,33 @@
+// =============================================================================
+// 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 -->
+
+// <-- Non-regression test for bug 14779 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/14779
+//
+// <-- Short Description -->
+// When used in logarithmic mode using coordinates <=0, xsegs crashed Scilab.
+
+clf;
+ax=gca();
+ax.data_bounds=[0.01 0.01;100 100];
+ax.log_flags="ll";
+ax.axes_visible="on";
+str = "xsegs([-1;0],[0;0],1)";
+
+assert_checkfalse(execstr(str   ,"errcatch") == 0);
+refMsg = msprintf(_("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "x");
+assert_checkerror(str, refMsg);
+
+ax.log_flags="nl";
+str = "xsegs([-1;0],[0;0],1)";
+assert_checkfalse(execstr(str   ,"errcatch") == 0);
+refMsg = msprintf(_("Error: Values must be strictly positive when logarithmic mode on %s axis is active.\n"), "y");
+assert_checkerror(str, refMsg);