# HG changeset patch # User John W. Eaton # Date 1290677726 18000 # Node ID 0adbb055b58585065056f247e282f7b69ad4a118 # Parent e2a4f3478b7c69ab10651b39451d3797e8d810ac correctly make room for new elements in sparse assignment 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);