diff libinterp/corefcn/graphics.in.h @ 17631:94dd9bba06a0

Fix validation of array properties to set(), avoid segfaults (bug #bug #35687). * libinterp/corefcn/graphics.cc(array_property::validate): Don't accept an empty matrix by default. Instead, check an empty matrix against any size constraints to verify it is allowed. * libinterp/corefcn/graphics.in.h: Update init() routines for all graphic objects to include size constraints on any array_properties. Also matched type constraints, such as "double" or "uint8", to Matlab.
author Rik <rik@octave.org>
date Fri, 11 Oct 2013 09:20:06 -0700
parents bd1dd30ed202
children 85a057ad1ba6
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.in.h	Fri Oct 11 08:17:07 2013 -0700
+++ b/libinterp/corefcn/graphics.in.h	Fri Oct 11 09:20:06 2013 -0700
@@ -1426,6 +1426,7 @@
   {
     add_constraint (dim_vector (-1, 1));
     add_constraint (dim_vector (1, -1));
+    add_constraint (dim_vector (0, 0));
   }
 
   row_vector_property (const row_vector_property& p)
@@ -1433,6 +1434,7 @@
   {
     add_constraint (dim_vector (-1, 1));
     add_constraint (dim_vector (1, -1));
+    add_constraint (dim_vector (0, 0));
   }
 
   void add_constraint (const std::string& type)
@@ -3363,13 +3365,14 @@
   protected:
     void init (void)
       {
+        alphamap.add_constraint (dim_vector (-1, 1));
         colormap.add_constraint (dim_vector (-1, 3));
-        alphamap.add_constraint (dim_vector (-1, 1));
+        outerposition.add_constraint (dim_vector (1, 4));
         paperposition.add_constraint (dim_vector (1, 4));
+        papersize.add_constraint (dim_vector (1, 2));
         pointershapecdata.add_constraint (dim_vector (16, 16));
         pointershapehotspot.add_constraint (dim_vector (1, 2));
         position.add_constraint (dim_vector (1, 4));
-        outerposition.add_constraint (dim_vector (1, 4));
       }
 
   private:
@@ -4454,6 +4457,9 @@
         cdata.add_constraint ("real");
         cdata.add_constraint (dim_vector (-1, -1));
         cdata.add_constraint (dim_vector (-1, -1, 3));
+        alphadata.add_constraint (dim_vector (-1, -1));
+        alphadata.add_constraint ("double");
+        alphadata.add_constraint ("uint8");
       }
 
   private:
@@ -4622,6 +4628,7 @@
         xdata.add_constraint (dim_vector (-1, -1));
         ydata.add_constraint (dim_vector (-1, -1));
         zdata.add_constraint (dim_vector (-1, -1));
+        faces.add_constraint (dim_vector (-1, -1));
         vertices.add_constraint (dim_vector (-1, 2));
         vertices.add_constraint (dim_vector (-1, 3));
         cdata.add_constraint (dim_vector (-1, -1));
@@ -4629,6 +4636,7 @@
         facevertexcdata.add_constraint (dim_vector (-1, 1));
         facevertexcdata.add_constraint (dim_vector (-1, 3));
         facevertexalphadata.add_constraint (dim_vector (-1, 1));
+        vertexnormals.add_constraint (dim_vector (-1, -1));
       }
 
   private:
@@ -4747,16 +4755,14 @@
         xdata.add_constraint (dim_vector (-1, -1));
         ydata.add_constraint (dim_vector (-1, -1));
         zdata.add_constraint (dim_vector (-1, -1));
-        alphadata.add_constraint ("single");
+        cdata.add_constraint ("double");
+        cdata.add_constraint ("single");
+        cdata.add_constraint (dim_vector (-1, -1));
+        cdata.add_constraint (dim_vector (-1, -1, 3));
         alphadata.add_constraint ("double");
         alphadata.add_constraint ("uint8");
         alphadata.add_constraint (dim_vector (-1, -1));
         vertexnormals.add_constraint (dim_vector (-1, -1, 3));
-        cdata.add_constraint ("single");
-        cdata.add_constraint ("double");
-        cdata.add_constraint ("uint8");
-        cdata.add_constraint (dim_vector (-1, -1));
-        cdata.add_constraint (dim_vector (-1, -1, 3));
       }
 
   private:
@@ -5062,7 +5068,6 @@
       {
         cdata.add_constraint ("double");
         cdata.add_constraint ("single");
-        cdata.add_constraint ("uint8");
         cdata.add_constraint (dim_vector (-1, -1, 3));
         position.add_constraint (dim_vector (1, 4));
         sliderstep.add_constraint (dim_vector (1, 2));
@@ -5283,7 +5288,6 @@
       {
         cdata.add_constraint ("double");
         cdata.add_constraint ("single");
-        cdata.add_constraint ("uint8");
         cdata.add_constraint (dim_vector (-1, -1, 3));
       }
   };
@@ -5337,7 +5341,6 @@
       {
         cdata.add_constraint ("double");
         cdata.add_constraint ("single");
-        cdata.add_constraint ("uint8");
         cdata.add_constraint (dim_vector (-1, -1, 3));
       }
   };