# HG changeset patch # User Rik # Date 1682042337 25200 # Node ID f18da620ab4dabd0dcc6ce7a687a2659a5e15829 # Parent 1824e0ee40885d1a23754c5d047ae2bbb8436d33 Fix floating point exception when Sparse array reshaped to 0x0 (bug #64080) * Sparse.cc (reshape): Test for empty matrix (number of rows or columns equal to 0) and immediately return constructed, but unfilled, empty sparse matrix. * data.cc (Freshape): Add BIST test for bug #64080. diff -r 1824e0ee4088 -r f18da620ab4d libinterp/corefcn/data.cc --- a/libinterp/corefcn/data.cc Tue Apr 18 11:09:17 2023 -0700 +++ b/libinterp/corefcn/data.cc Thu Apr 20 18:58:57 2023 -0700 @@ -5981,6 +5981,8 @@ %!assert (size (reshape (ones (15, 4, "single"), 1, 60)), [1, 60]) %!assert (size (reshape (ones (15, 4, "single"), 60, 1)), [60, 1]) +%!assert <*64080> (size (reshape (sparse (0, 1), 0, 0)), [0, 0]) + %!test %! s.a = 1; %! fail ("reshape (s, 2, 3)", "can't reshape 1x1 array to 2x3 array"); diff -r 1824e0ee4088 -r f18da620ab4d liboctave/array/Sparse.cc --- a/liboctave/array/Sparse.cc Tue Apr 18 11:09:17 2023 -0700 +++ b/liboctave/array/Sparse.cc Thu Apr 20 18:58:57 2023 -0700 @@ -873,6 +873,9 @@ octave_idx_type old_nr = rows (); octave_idx_type old_nc = cols (); retval = Sparse (new_nr, new_nc, new_nnz); + // Special case for empty matrices (bug #64080) + if (new_nr == 0 || new_nc == 0) + return retval; octave_idx_type kk = 0; retval.xcidx (0) = 0;