Mercurial > octave
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)); } };