changeset 33539:85c8686b78e9

data.cc: Minor addition to input validation for sort() `sort()` was allowing non-integer dimensions like `sort (magic (3), 1.6)`. This patch fixes that behavior. * data.cc (Fsort): Add integer validation, comment other validations. Add BISTs.
author Arun Giridhar <arungiridhar@gmail.com>
date Tue, 07 May 2024 19:34:15 -0400
parents 4ef1d6ab26e4
children d203daf66e1c c7b92fa723cc
files libinterp/corefcn/data.cc
diffstat 1 files changed, 9 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc	Mon May 06 20:47:55 2024 +0200
+++ b/libinterp/corefcn/data.cc	Tue May 07 19:34:15 2024 -0400
@@ -7120,8 +7120,14 @@
         }
       else
         {
+          // Check dim is scalar, not vector or array.
           if (! args(1).is_scalar_type ())
             error ("sort: DIM must be a positive scalar integer");
+
+          // Check for inputs like sort (magic(3), 1.6).
+          dim = args(1).strict_int_value ("sort: DIM must be a positive scalar integer");
+
+          // Check for inf.
           dim = args(1).nint_value () - 1;
           if (dim < 0)
             error ("sort: DIM must be a positive scalar integer");
@@ -7389,6 +7395,9 @@
 %!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 must be a positive scalar integer> sort ([1 2; 3 4], 1.234)
+%!error <DIM must be a positive scalar integer> sort ([1 2; 3 4], nan)
+%!error <DIM must be a positive scalar integer> sort ([1 2; 3 4], inf)
 %!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")