# HG changeset patch # User Rik # Date 1291405569 28800 # Node ID 3bddc4ea8141ebfd3aa9671e7079a52c5600a2e7 # Parent ffbcb0edfbdad83059b9c534cad2b058998a77b9 Fix bug #31734 where certain indices caused sparse matrices to segfault. diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +2010-11-25 John W. Eaton + + * Sparse.cc (Sparse::assign): Use correct endpoint for + destination range when making room for new elements. + 2010-11-23 John W. Eaton * oct-md5.cc (oct_md5_result_to_str): Avoid buffer overrun in diff --git a/liboctave/Sparse.cc b/liboctave/Sparse.cc --- a/liboctave/Sparse.cc +++ b/liboctave/Sparse.cc @@ -1747,10 +1747,10 @@ if (new_nz > nz) { // Make room first. - std::copy_backward (data () + ui, data () + nz, data () + li + rnz); - std::copy_backward (ridx () + ui, ridx () + nz, ridx () + li + rnz); + std::copy_backward (data () + ui, data () + nz, data () + nz + rnz); + std::copy_backward (ridx () + ui, ridx () + nz, ridx () + nz + rnz); } - + // Copy data and adjust indices from rhs. copy_or_memcpy (rnz, rhs.data (), data () + li); mx_inline_add (rnz, ridx () + li, rhs.ridx (), lb);