From adb30efb256ae1bb339354a1e37572701748b43f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20S=C3=A1nchez?= Date: Wed, 26 Oct 2022 22:51:33 +0000 Subject: [PATCH] Add assert for invalid outerIndexPtr array in SparseMapBase. --- Eigen/src/SparseCore/SparseMap.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Eigen/src/SparseCore/SparseMap.h b/Eigen/src/SparseCore/SparseMap.h index 0ee381354..3e0a5e980 100644 --- a/Eigen/src/SparseCore/SparseMap.h +++ b/Eigen/src/SparseCore/SparseMap.h @@ -127,7 +127,13 @@ class SparseMapBase ScalarPointer valuePtr, IndexPointer innerNonZerosPtr = 0) : m_outerSize(IsRowMajor?rows:cols), m_innerSize(IsRowMajor?cols:rows), m_zero_nnz(0,internal::convert_index(nnz)), m_outerIndex(outerIndexPtr), m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(innerNonZerosPtr) - {} + { + eigen_assert( + outerIndexPtr == nullptr // Sparse Vector. + || ((m_innerNonZeros == nullptr && outerIndexPtr[m_outerSize] == nnz) // Compressed Matrix. + || (m_innerNonZeros != nullptr && outerIndexPtr[m_outerSize] >= outerIndexPtr[m_outerSize-1] + m_innerNonZeros[m_outerSize - 1]) // Non-compressed Matrix. + && "The outer index ptr must have m_outerSize+1 elements, and the last value must indicate the total size of the valuePtr array.")); + } // for vectors inline SparseMapBase(Index size, Index nnz, IndexPointer innerIndexPtr, ScalarPointer valuePtr)