Mercurial > octave
changeset 33271:59ee9d370307
Better input validation for sort() function (bug #65527)
* data.cc: Verify DIM input is a positive scalar. Change error message when
incorrectly using MODE input to be more specific. Add BIST tests.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 29 Mar 2024 14:46:02 -0700 |
parents | 65d2a1f70155 |
children | a29e8d52c4e8 |
files | libinterp/corefcn/data.cc |
diffstat | 1 files changed, 17 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc Fri Mar 29 14:53:49 2024 +0100 +++ b/libinterp/corefcn/data.cc Fri Mar 29 14:46:02 2024 -0700 @@ -7089,13 +7089,19 @@ error (R"(sort: MODE must be either "ascend" or "descend")"); } else - dim = args(1).nint_value () - 1; + { + if (! args(1).is_scalar_type ()) + error ("sort: DIM must be a positive scalar integer"); + dim = args(1).nint_value () - 1; + if (dim < 0) + error ("sort: DIM must be a positive scalar integer"); + } } if (nargin > 2) { if (have_sortmode) - error ("sort: DIM must be a valid dimension"); + error ("sort: DIM argument must precede MODE argument"); std::string mode = args(2).xstring_value ("sort: MODE must be a string"); @@ -7112,11 +7118,6 @@ { dim = dv.first_non_singleton (); } - else - { - if (dim < 0) - error ("sort: DIM must be a valid dimension"); - } octave_value_list retval (return_idx ? 2 : 1); @@ -7354,8 +7355,15 @@ %! [v, i] = sort (a); %! assert (i, [1, 4, 2, 5, 3]); -%!error sort () -%!error sort (1, 2, 3, 4) +%!error <Invalid call> sort () +%!error <Invalid call> sort (1, 2, 3, 4) +%!error <MODE must be either "ascend" or "descend"> sort (1, "foobar") +%!error <DIM must be a positive scalar integer> sort (1, [1 2 3]) +%!error <DIM argument must precede MODE argument> sort (1, "ascend", 1) +%!error <MODE must be a string> sort (1, 1, 1) +%!error <MODE must be either "ascend" or "descend"> sort (1, 1, "foobar") +%!error <DIM must be a positive scalar integer> sort (1, 0) + */ // Sort the rows of the matrix @var{a} according to the order