changeset 21255:6209f428426c stable

Fix memory corruption allocating to sparse arrays (bug #42825). * liboctave/array/Sparse.cc (Sparse<T>::assign): make room by using std::copy_backward.
author Lachlan Andrew <lachlanbis@gmail.com>
date Sat, 09 Jan 2016 20:40:49 +1100
parents f09f7dd58503
children a93fa1b0796e
files liboctave/array/Sparse.cc
diffstat 1 files changed, 4 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/Sparse.cc	Wed Feb 10 14:57:56 2016 -0500
+++ b/liboctave/array/Sparse.cc	Sat Jan 09 20:40:49 2016 +1100
@@ -2069,10 +2069,10 @@
                   if (new_nz > nz)
                     {
                       // Make room first.
-                      std::copy (data () + ui, data () + nz,
-                                 data () + li + rnz);
-                      std::copy (ridx () + ui, ridx () + nz,
-                                 ridx () + li + rnz);
+                      std::copy_backward (data () + ui, data () + nz,
+                                          data () + new_nz);
+                      std::copy_backward (ridx () + ui, ridx () + nz,
+                                          ridx () + new_nz);
                       mx_inline_add2 (nc - ub, cidx () + ub + 1, new_nz - nz);
                     }