Bug 12234 fixed: Graphics could crash with an invalid property 27/10727/3
Calixte DENIZET [Thu, 7 Mar 2013 13:49:13 +0000 (14:49 +0100)]
Change-Id: Id7d8b5bacaf30cda1abb4ca6b478872c75799fc7

scilab/CHANGES_5.4.X
scilab/modules/graphic_objects/src/cpp/dataModel.cpp
scilab/modules/graphic_objects/tests/nonreg_tests/bug_12234.dia.ref [new file with mode: 0644]
scilab/modules/graphic_objects/tests/nonreg_tests/bug_12234.tst [new file with mode: 0644]

index 78ce8d3..595aa03 100644 (file)
@@ -434,6 +434,8 @@ Bug fixes
 
 * Bug #12232 fixed - There were several memleaks in various fillers.
 
+* Bug #12234 fixed - Graphics could crash with an invalid property.
+
 * Bug #12235 fixed - Matplot did not update on color_map change.
 
 * Bug #12238 fixed - [d v] = eigs(A) was broken for sparse matrices.
index bbd7f44..5a6cc22 100644 (file)
@@ -51,7 +51,18 @@ void DataModel::getGraphicObjectProperty(char const* _pstID, int _iName, void **
 
     dataObject = (*m_dataMap)[std::string(_pstID)];
 
+    if (dataObject == NULL)
+    {
+        *_pvData = NULL;
+        return;
+    }
+
     property = dataObject->getPropertyFromName(_iName);
+    if (property == UNKNOWN_DATA_PROPERTY)
+    {
+        *_pvData = NULL;
+        return;
+    }
 
     dataObject->getDataProperty(property, _pvData);
 }
@@ -96,19 +107,19 @@ char const* DataModel::createDataObject(char const* _pstID, int _iType)
 
 void DataModel::deleteDataObject(char const* _pstID)
 {
-    std::map<std::string, Data3D*>::iterator it = m_dataMap->find(std::string(_pstID)); 
+    std::map<std::string, Data3D*>::iterator it = m_dataMap->find(std::string(_pstID));
     if (it != m_dataMap->end() && it->second != NULL)
     {
         delete it->second;
-       m_dataMap->erase(it);
+        m_dataMap->erase(it);
     }
-  
+
     /*Data3D* newObject = (*m_dataMap)[std::string(_pstID)];
-    if (newObject != NULL)
-    {
-        delete newObject;
-    }
+      if (newObject != NULL)
+      {
+      delete newObject;
+      }
 
-    m_dataMap->erase(std::string(_pstID));*/
+      m_dataMap->erase(std::string(_pstID));*/
 }
 
diff --git a/scilab/modules/graphic_objects/tests/nonreg_tests/bug_12234.dia.ref b/scilab/modules/graphic_objects/tests/nonreg_tests/bug_12234.dia.ref
new file mode 100644 (file)
index 0000000..2535632
--- /dev/null
@@ -0,0 +1,17 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+// <-- Non-regression test for bug 12234 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/12234
+//
+// <-- Short Description -->
+// Crash with invalid property
+refMsg = msprintf(_("''%s'' property does not exist for this handle.\n"), "data");
+e=gce();
+assert_checkerror("set(e, ''interp_color_vector'', 1:4)", refMsg);
diff --git a/scilab/modules/graphic_objects/tests/nonreg_tests/bug_12234.tst b/scilab/modules/graphic_objects/tests/nonreg_tests/bug_12234.tst
new file mode 100644 (file)
index 0000000..9fbc361
--- /dev/null
@@ -0,0 +1,20 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+// <-- Non-regression test for bug 12234 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/12234
+//
+// <-- Short Description -->
+// Crash with invalid property
+
+refMsg = msprintf(_("''%s'' property does not exist for this handle.\n"), "data");
+e=gce();
+assert_checkerror("set(e, ''interp_color_vector'', 1:4)", refMsg);