Mercurial > octave
changeset 32290:a81a6fb82c0e
Check for integer overflow when copying sizes from SuiteSparse matrices.
* liboctave/array/CSparse.cc, dSparse.cc (fsolve),
liboctave/numeric/sparse-chol.cc (sparse_chol_rep::P),
liboctave/numeric/sparse-qr.cc (sparse_qr<SparseMatrix>::sparse_qr_rep::R): Use
"from_size_t" instead of casting nrow and ncol from SuiteSparse matrix
structures without any overflow check.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Fri, 08 Sep 2023 15:33:36 +0200 |
parents | a9d6f8953ef0 |
children | 557f0edeb210 |
files | liboctave/array/CSparse.cc liboctave/array/dSparse.cc liboctave/numeric/sparse-chol.cc liboctave/numeric/sparse-qr.cc |
diffstat | 4 files changed, 11 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/array/CSparse.cc Fri Sep 08 15:07:14 2023 +0200 +++ b/liboctave/array/CSparse.cc Fri Sep 08 15:33:36 2023 +0200 @@ -6040,8 +6040,8 @@ cholmod_sparse *X = CHOLMOD_NAME(spsolve) (CHOLMOD_A, L, B, cm); retval = SparseComplexMatrix - (static_cast<octave_idx_type> (X->nrow), - static_cast<octave_idx_type> (X->ncol), + (octave::from_size_t (X->nrow), + octave::from_size_t (X->ncol), octave::from_suitesparse_long (CHOLMOD_NAME(nnz) (X, cm))); for (octave_idx_type j = 0; @@ -6550,8 +6550,8 @@ cholmod_sparse *X = CHOLMOD_NAME(spsolve) (CHOLMOD_A, L, B, cm); retval = SparseComplexMatrix - (static_cast<octave_idx_type> (X->nrow), - static_cast<octave_idx_type> (X->ncol), + (octave::from_size_t (X->nrow), + octave::from_size_t (X->ncol), octave::from_suitesparse_long (CHOLMOD_NAME(nnz) (X, cm))); for (octave_idx_type j = 0;
--- a/liboctave/array/dSparse.cc Fri Sep 08 15:07:14 2023 +0200 +++ b/liboctave/array/dSparse.cc Fri Sep 08 15:33:36 2023 +0200 @@ -6054,8 +6054,8 @@ cholmod_sparse *X = CHOLMOD_NAME(spsolve) (CHOLMOD_A, L, B, cm); retval = SparseMatrix - (static_cast<octave_idx_type> (X->nrow), - static_cast<octave_idx_type> (X->ncol), + (octave::from_size_t (X->nrow), + octave::from_size_t (X->ncol), octave::from_suitesparse_long (CHOLMOD_NAME(nnz) (X, cm))); for (octave_idx_type j = 0; @@ -6549,8 +6549,8 @@ cholmod_sparse *X = CHOLMOD_NAME(spsolve) (CHOLMOD_A, L, B, cm); retval = SparseComplexMatrix - (static_cast<octave_idx_type> (X->nrow), - static_cast<octave_idx_type> (X->ncol), + (octave::from_size_t (X->nrow), + octave::from_size_t (X->ncol), octave::from_suitesparse_long (CHOLMOD_NAME(nnz) (X, cm))); for (octave_idx_type j = 0;
--- a/liboctave/numeric/sparse-chol.cc Fri Sep 08 15:07:14 2023 +0200 +++ b/liboctave/numeric/sparse-chol.cc Fri Sep 08 15:33:36 2023 +0200 @@ -105,8 +105,7 @@ octave_idx_type P () const { #if defined (HAVE_CHOLMOD) - return (m_minor_p == static_cast<octave_idx_type> (m_L->ncol) ? - 0 : m_minor_p + 1); + return (m_minor_p == from_size_t (m_L->ncol) ? 0 : m_minor_p + 1); #else return 0; #endif
--- a/liboctave/numeric/sparse-qr.cc Fri Sep 08 15:07:14 2023 +0200 +++ b/liboctave/numeric/sparse-qr.cc Fri Sep 08 15:33:36 2023 +0200 @@ -634,8 +634,8 @@ { #if (defined (HAVE_SPQR) && defined (HAVE_CHOLMOD)) - octave_idx_type nr = static_cast<octave_idx_type> (m_R->nrow); - octave_idx_type nc = static_cast<octave_idx_type> (m_R->ncol); + octave_idx_type nr = from_size_t (m_R->nrow); + octave_idx_type nc = from_size_t (m_R->ncol); octave_idx_type nz = from_suitesparse_long (cholmod_l_nnz (m_R, const_cast<cholmod_common *> (&m_cc)));