changeset 14490:3959f3f81e33 stable

Initialise memory in non-square diag call (bug #35946) * diag.cc (Fdiag): Initialise memory in call to resize(), and write a test to check for this.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Thu, 22 Mar 2012 11:34:48 -0400
parents 51fd0cf227e4
children 5bd9e47e9277 b472596cd7b9
files src/data.cc
diffstat 1 files changed, 4 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/data.cc	Wed Mar 21 17:17:05 2012 -0400
+++ b/src/data.cc	Thu Mar 22 11:34:48 2012 -0400
@@ -1294,7 +1294,7 @@
         {
           octave_idx_type m = args(1).int_value (), n = args(2).int_value ();
           if (! error_state)
-            retval = arg0.diag ().resize (dim_vector (m, n));
+            retval = arg0.diag ().resize (dim_vector (m, n), true);
           else
             error ("diag: invalid dimensions");
         }
@@ -1341,6 +1341,9 @@
 %!assert(diag (int8([0, 1, 0, 0; 0, 0, 2, 0; 0, 0, 0, 3; 0, 0, 0, 0]), 1), int8([1; 2; 3]));
 %!assert(diag (int8([0, 0, 0, 0; 1, 0, 0, 0; 0, 2, 0, 0; 0, 0, 3, 0]), -1), int8([1; 2; 3]));
 
+## Test non-square size
+%!assert(diag ([1,2,3], 6, 3), [1 0 0; 0 2 0; 0 0 3; 0 0 0; 0 0 0; 0 0 0])
+
 %% Test input validation
 %!error <Invalid call to diag> diag ();
 %!error <Invalid call to diag> diag (1,2,3,4);