# HG changeset patch # User jwe # Date 1082662694 0 # Node ID 05d464a13f43fe29f162bd7126976f35579af14e # Parent e674c7111b887c32ed75e00968b16172548ef017 [project @ 2004-04-22 19:38:14 by jwe] diff --git a/liboctave/Array.cc b/liboctave/Array.cc --- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -2004,7 +2004,7 @@ if (len == 0 && idx_arg.one_zero_only ()) retval = Array (tmp, dim_vector (0, 0)); - else + else if (len >= idx_orig_dims.numel ()) retval = Array (tmp, idx_orig_dims); } else if (nr == 1 || nc == 1) @@ -2025,7 +2025,7 @@ else retval = Array (tmp, dim_vector (len, 1)); } - else + else if (len >= idx_orig_dims.numel ()) retval = Array (tmp, idx_orig_dims); } else @@ -2101,8 +2101,13 @@ Array tmp = Array::index (ra_idx, resize_ok); - if (tmp.length () != 0) - retval = Array (tmp, idx_orig_dims); + int len = tmp.length (); + + if (len != 0) + { + if (len >= idx_orig_dims.numel ()) + retval = Array (tmp, idx_orig_dims); + } else retval = Array (tmp, dim_vector (0, 0)); } @@ -2154,7 +2159,7 @@ retval = Array (tmp, new_dims); } - else + else if (tmp.length () >= idx_orig_dims.numel ()) retval = Array (tmp, idx_orig_dims); (*current_liboctave_error_handler) diff --git a/liboctave/ChangeLog b/liboctave/ChangeLog --- a/liboctave/ChangeLog +++ b/liboctave/ChangeLog @@ -1,3 +1,8 @@ +2004-04-22 John W. Eaton + + * Array.cc (Array::index2, Array::indexN): + Don't set invalid dimensions on return value. + 2004-04-21 John W. Eaton * mx-inlines.cc (MX_ND_REDUCTION): Chop trailing singletons. diff --git a/src/ChangeLog b/src/ChangeLog --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2004-04-22 John W. Eaton + + * pt-colon.cc (tree_colon_expression::rvalue): Also check for + error_state after evaluating each subexpression. + 2004-04-22 David Bateman * ov-base-scalar.h (octave_base_scalar::permute): New function. diff --git a/src/pt-colon.cc b/src/pt-colon.cc --- a/src/pt-colon.cc +++ b/src/pt-colon.cc @@ -96,9 +96,9 @@ octave_value tmp = op_base->rvalue (); - if (tmp.is_undefined ()) + if (error_state || tmp.is_undefined ()) { - eval_error ("invalid null value in colon expression"); + eval_error ("invalid value in colon expression"); return retval; } @@ -112,9 +112,9 @@ tmp = op_limit->rvalue (); - if (tmp.is_undefined ()) + if (error_state || tmp.is_undefined ()) { - eval_error ("invalid null value in colon expression"); + eval_error ("invalid value in colon expression"); return retval; } @@ -132,9 +132,9 @@ { tmp = op_increment->rvalue (); - if (tmp.is_undefined ()) + if (error_state || tmp.is_undefined ()) { - eval_error ("invalid null value in colon expression"); + eval_error ("invalid value in colon expression"); return retval; }