changeset 16073:1c8234f0b642

Fix bounds-checking in diagonal matrices (bug #38357) * ov-base-diag.cc (octave_base_diag<DMT, MT>::do_index_op): Call checkelem instead of elem in the (scalar, scalar) indexing case. * index.tst: Add tests.
author Jordi Gutiérrez Hermoso <jordigh@octave.org>
date Wed, 20 Feb 2013 16:37:02 -0500
parents ac672925fc98
children 821922270b66
files libinterp/octave-value/ov-base-diag.cc test/index.tst
diffstat 2 files changed, 18 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-base-diag.cc	Wed Feb 20 11:36:36 2013 -0500
+++ b/libinterp/octave-value/ov-base-diag.cc	Wed Feb 20 16:37:02 2013 -0500
@@ -109,7 +109,7 @@
 
       if (idx0.is_scalar () && idx1.is_scalar ())
         {
-          retval = matrix.elem (idx0(0), idx1(0));
+          retval = matrix.checkelem (idx0(0), idx1(0));
         }
       else
         {
--- a/test/index.tst	Wed Feb 20 11:36:36 2013 -0500
+++ b/test/index.tst	Wed Feb 20 16:37:02 2013 -0500
@@ -210,3 +210,20 @@
 %!error <attempted to use a complex scalar as an index> x(i)
 %!error <attempted to use a complex scalar as an index> x(j)
 %!error <attempted to use a complex scalar as an index> x(1+i)
+
+## bug #38357
+%!shared d, dd
+%! d = diag ([1, 2, 3]);
+%! dd = diag ([1, 2, 3], 6, 3);
+%!assert (d(1), 1);
+%!assert (dd(1), 1);
+%!assert (d(3, 3), 3);
+%!assert (dd(3, 3), 3);
+%!assert (d(2), 0);
+%!assert (dd(2), 0);
+%!assert (dd(6,1), 0);
+%!error d(6,6);
+%!error dd(6,6);
+%!error d(3,6);
+%!error dd(3,6);
+