changeset 33181:2bee38885727 stable

Check that number of values in "facevertexcdata" is consistent in patch (bug #65431). * libinterp/corefcn/graphics.cc (patch::properties::update_data): Do not continue if the number of color values in the "facevertexcdata" property matches neither the number of faces nor the number of vertices of a patch object.
author Markus Mützel <markus.muetzel@gmx.de>
date Fri, 08 Mar 2024 19:16:53 +0100
parents b5ffc06b39b2
children a959fc381fee c4500208f280
files libinterp/corefcn/graphics.cc
diffstat 1 files changed, 18 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.cc	Fri Mar 08 08:19:52 2024 +0100
+++ b/libinterp/corefcn/graphics.cc	Fri Mar 08 19:16:53 2024 +0100
@@ -9631,6 +9631,15 @@
       return;
     }
 
+  // Check if number of color values matches number of faces or vertices
+  octave_idx_type nfvc = fvc.rows ();
+  if (nfvc > 1 && nfvc != nfaces && nfvc != nvert)
+    {
+      m_bad_data_msg = "number of facevertexcdata values matches "
+                       "neither number of faces nor number of vertices";
+      return;
+    }
+
   // Replace NaNs
   if (idx.any_element_is_inf_or_nan ())
     {
@@ -9697,21 +9706,20 @@
 
   if (fvc.rows () == nfaces || fvc.rows () == 1)
     {
+      // "facevertexcdata" holds color data per face or same color for all
       dv(0) = 1;
       dv(1) = fvc.rows ();
       dv(2) = fvc.columns ();
       cd = fvc.reshape (dv);
     }
-  else
-    {
-      if (! fvc.isempty ())
-        {
-          dv(0) = idx.rows ();
-          dv(1) = nfaces;
-          dv(2) = fvc.columns ();
-          cd.resize (dv);
-          pervertex = true;
-        }
+  else if (! fvc.isempty ())
+    {
+      // "facevertexcdata" holds color data per vertex
+      dv(0) = idx.rows ();
+      dv(1) = nfaces;
+      dv(2) = fvc.columns ();
+      cd.resize (dv);
+      pervertex = true;
     }
 
   // Build x,y,zdata and eventually per vertex cdata