Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • VTK VTK
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 833
    • Issues 833
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 237
    • Merge requests 237
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • VTKVTK
  • VTKVTK
  • Issues
  • #17991
Closed
Open
Issue created Aug 28, 2020 by David Thompson@dcthompDeveloper

Rendering degenerate triangle strips can cause a crash

Some of a customer's polydatas end up with a single point and a triangle strip. Polydata with 1 point will pass the first test in vtkCompositeMapperHelper2::AppendOneBufferObject, which returns if poly->GetNumberOfPoints() is 0. A polydata can then squeeze through to vtkOpenGLIndexBufferObject::AppendStripIndexBuffer and underflow the calculation of triCount.

 vtkSmartPointer<vtkPolyData> poly = vtkSmartPointer<vtkPolyData>::New();
 vtkSmartPointer<vtkCellArray> triangleStrips = vtkSmartPointer<vtkCellArray>::New();
 vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();

 vtkSmartPointer<vtkTriangleStrip> strip = vtkSmartPointer<vtkTriangleStrip>::New();
 points->InsertNextPoint(0.0, 0.0, 0.0);
 strip->GetPointIds()->InsertId(0, 0);
 triangleStrips->InsertNextCell(strip);

 poly->SetPoints(points);
 poly->SetStrips(triangleStrips);

 vtkSmartPointer<vtkXMLPolyDataWriter> writer = vtkSmartPointer<vtkXMLPolyDataWriter>::New();
 writer->SetInputData(poly);
 writer->SetFileName("/your/path/to/bad_poly.vtp");
 writer->Write();

fyi: @chart3388

Assignee
Assign to
Time tracking