Read off the end of array in vtkPlotBar
I was running valgrind on ParaView w/ the OpenGL2 backend and I found this. Attached is a patch that will check the bounds in an assert. This assert will cause pv.HistogramSelection to fail.
Original error:
==13526== Invalid read of size 4
==13526== at 0xCC34229: vtkPlotBarSegment::Paint(vtkContext2D*, vtkPen*, vtkBrush*, float, float, int) (vtkPlotBar.cxx:250)
==13526== by 0xCC352CE: vtkPlotBarPrivate::PaintSegments(vtkContext2D*, vtkColorSeries*, vtkPen*, vtkBrush*, float, float, int) (vtkPlotBar.cxx:491)
==13526== by 0xCC0DCE9: vtkPlotBar::Paint(vtkContext2D*) (vtkPlotBar.cxx:617)
==13526== by 0xD48C709: vtkContextScenePrivate::PaintItems(vtkContext2D*) (vtkContextScenePrivate.h:80)
==13526== by 0xD48B20C: vtkAbstractContextItem::PaintChildren(vtkContext2D*) (vtkAbstractContextItem.cxx:50)
==13526== by 0xD4A30DF: vtkContextTransform::Paint(vtkContext2D*) (vtkContextTransform.cxx:58)
==13526== by 0xD48C709: vtkContextScenePrivate::PaintItems(vtkContext2D*) (vtkContextScenePrivate.h:80)
==13526== by 0xD48B20C: vtkAbstractContextItem::PaintChildren(vtkContext2D*) (vtkAbstractContextItem.cxx:50)
==13526== by 0xD49BBB2: vtkContextClip::Paint(vtkContext2D*) (vtkContextClip.cxx:54)
==13526== by 0xD48C709: vtkContextScenePrivate::PaintItems(vtkContext2D*) (vtkContextScenePrivate.h:80)
==13526== by 0xD48B20C: vtkAbstractContextItem::PaintChildren(vtkContext2D*) (vtkAbstractContextItem.cxx:50)
==13526== by 0xCBB7FFD: vtkChartXY::Paint(vtkContext2D*) (vtkChartXY.cxx:430)
==13526== Address 0x36c1ddb4 is 20 bytes after a block of size 16 alloc'd
==13526== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==13526== by 0xB441F8F: vtkBuffer<float>::Allocate(long long) (vtkBuffer.h:134)
==13526== by 0xB44055A: vtkAOSDataArrayTemplate<float>::AllocateTuples(long long) (vtkAOSDataArrayTemplate.txx:273)
==13526== by 0xB444DEC: vtkGenericDataArray<vtkAOSDataArrayTemplate<float>, float>::AllocateTuples(long long) (vtkGenericDataArray.h:278)
==13526== by 0xB4423D1: vtkGenericDataArray<vtkAOSDataArrayTemplate<float>, float>::Allocate(long long, long long) (vtkGenericDataArray.txx:390)
==13526== by 0xB442663: vtkGenericDataArray<vtkAOSDataArrayTemplate<float>, float>::SetNumberOfTuples(long long) (vtkGenericDataArray.txx:481)
==13526== by 0xCBE080A: vtkPoints2D::SetNumberOfPoints(long long) (vtkPoints2D.h:201)
==13526== by 0xCC1753C: void (anonymous namespace)::CopyToPoints<double, int>(vtkPoints2D*, vtkPoints2D*, double*, int*, int, int, vtkRectd const&) (vtkPlotBar.cxx:53)
==13526== by 0xCC10EFE: void (anonymous namespace)::CopyToPointsSwitch<double>(vtkPoints2D*, vtkPoints2D*, double*, vtkDataArray*, int, int, vtkRectd const&) (vtkPlotBar.cxx:115)
==13526== by 0xCC31FF6: vtkPlotBarSegment::Configure(vtkPlotBar*, vtkDataArray*, vtkDataArray*, vtkAxis*, vtkAxis*, vtkPlotBarSegment*) (vtkPlotBar.cxx:163)
==13526== by 0xCC350F9: vtkPlotBarPrivate::AddSegment(vtkDataArray*, vtkDataArray*, vtkAxis*, vtkAxis*, vtkPlotBarSegment*) (vtkPlotBar.cxx:473)
==13526== by 0xCC0F4D7: vtkPlotBar::UpdateTableCache(vtkTable*) (vtkPlotBar.cxx:867)
==13526==
==13526== Invalid read of size 4
==13526== at 0xCC34241: vtkPlotBarSegment::Paint(vtkContext2D*, vtkPen*, vtkBrush*, float, float, int) (vtkPlotBar.cxx:250)
==13526== by 0xCC352CE: vtkPlotBarPrivate::PaintSegments(vtkContext2D*, vtkColorSeries*, vtkPen*, vtkBrush*, float, float, int) (vtkPlotBar.cxx:491)
==13526== by 0xCC0DCE9: vtkPlotBar::Paint(vtkContext2D*) (vtkPlotBar.cxx:617)
==13526== by 0xD48C709: vtkContextScenePrivate::PaintItems(vtkContext2D*) (vtkContextScenePrivate.h:80)
==13526== by 0xD48B20C: vtkAbstractContextItem::PaintChildren(vtkContext2D*) (vtkAbstractContextItem.cxx:50)
==13526== by 0xD4A30DF: vtkContextTransform::Paint(vtkContext2D*) (vtkContextTransform.cxx:58)
==13526== by 0xD48C709: vtkContextScenePrivate::PaintItems(vtkContext2D*) (vtkContextScenePrivate.h:80)
==13526== by 0xD48B20C: vtkAbstractContextItem::PaintChildren(vtkContext2D*) (vtkAbstractContextItem.cxx:50)
==13526== by 0xD49BBB2: vtkContextClip::Paint(vtkContext2D*) (vtkContextClip.cxx:54)
==13526== by 0xD48C709: vtkContextScenePrivate::PaintItems(vtkContext2D*) (vtkContextScenePrivate.h:80)
==13526== by 0xD48B20C: vtkAbstractContextItem::PaintChildren(vtkContext2D*) (vtkAbstractContextItem.cxx:50)
==13526== by 0xCBB7FFD: vtkChartXY::Paint(vtkContext2D*) (vtkChartXY.cxx:430)
==13526== Address 0x36c1ddb0 is 16 bytes after a block of size 16 alloc'd
==13526== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==13526== by 0xB441F8F: vtkBuffer<float>::Allocate(long long) (vtkBuffer.h:134)
==13526== by 0xB44055A: vtkAOSDataArrayTemplate<float>::AllocateTuples(long long) (vtkAOSDataArrayTemplate.txx:273)
==13526== by 0xB444DEC: vtkGenericDataArray<vtkAOSDataArrayTemplate<float>, float>::AllocateTuples(long long) (vtkGenericDataArray.h:278)
==13526== by 0xB4423D1: vtkGenericDataArray<vtkAOSDataArrayTemplate<float>, float>::Allocate(long long, long long) (vtkGenericDataArray.txx:390)
==13526== by 0xB442663: vtkGenericDataArray<vtkAOSDataArrayTemplate<float>, float>::SetNumberOfTuples(long long) (vtkGenericDataArray.txx:481)
==13526== by 0xCBE080A: vtkPoints2D::SetNumberOfPoints(long long) (vtkPoints2D.h:201)
==13526== by 0xCC1753C: void (anonymous namespace)::CopyToPoints<double, int>(vtkPoints2D*, vtkPoints2D*, double*, int*, int, int, vtkRectd const&) (vtkPlotBar.cxx:53)
==13526== by 0xCC10EFE: void (anonymous namespace)::CopyToPointsSwitch<double>(vtkPoints2D*, vtkPoints2D*, double*, vtkDataArray*, int, int, vtkRectd const&) (vtkPlotBar.cxx:115)
==13526== by 0xCC31FF6: vtkPlotBarSegment::Configure(vtkPlotBar*, vtkDataArray*, vtkDataArray*, vtkAxis*, vtkAxis*, vtkPlotBarSegment*) (vtkPlotBar.cxx:163)
==13526== by 0xCC350F9: vtkPlotBarPrivate::AddSegment(vtkDataArray*, vtkDataArray*, vtkAxis*, vtkAxis*, vtkPlotBarSegment*) (vtkPlotBar.cxx:473)
==13526== by 0xCC0F4D7: vtkPlotBar::UpdateTableCache(vtkTable*) (vtkPlotBar.cxx:867)
==13526==