From e904a47f0474abe95082f8130777787329c85f39 Mon Sep 17 00:00:00 2001 From: Ben Boeckel <ben.boeckel@kitware.com> Date: Tue, 16 Apr 2024 09:45:44 -0400 Subject: [PATCH] DataArrayConverters: check for allocation overflow --- .../Vtkm/Core/vtkmlib/DataArrayConverters.cxx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Accelerators/Vtkm/Core/vtkmlib/DataArrayConverters.cxx b/Accelerators/Vtkm/Core/vtkmlib/DataArrayConverters.cxx index 35cfd734ac3..e94c6d4b885 100644 --- a/Accelerators/Vtkm/Core/vtkmlib/DataArrayConverters.cxx +++ b/Accelerators/Vtkm/Core/vtkmlib/DataArrayConverters.cxx @@ -14,6 +14,9 @@ #include "vtkDataArray.h" #include "vtkPoints.h" +#include <cstdint> +#include <limits> + namespace fromvtkm { VTK_ABI_NAMESPACE_BEGIN @@ -114,6 +117,17 @@ public: } else { + if (static_cast<std::size_t>(size) >= + static_cast<std::size_t>(std::numeric_limits<std::ptrdiff_t>::max()) / sizeof(ValueType)) + { + this->Data = nullptr; + array->Delete(); + std::ostringstream err; + err << "Allocation request too big: " << size << " elements of " << sizeof(ValueType) + << " bytes"; + throw vtkm::cont::ErrorBadAllocation(err.str()); + } + // deep copy the memory to VTK as the memory coming from // a source that VTK can't represent ValueType* dataBuffer = new ValueType[size]; -- GitLab