changeset 33544:31bc9accbe6e

data.cc: Add back input validation from 85c8686b78e9 `sort()` was allowing non-integer dimensions like `sort (magic (3), 1.6)`. This patch fixes that behavior. * data.cc (Fsort): Add integer validation checks. Add BISTs. Comment code.
author Arun Giridhar <arungiridhar@gmail.com>
date Wed, 08 May 2024 08:57:13 -0400
parents 8f73f8534d42
children 11b5c462f640 47c798415504
files libinterp/corefcn/data.cc
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc	Wed May 08 08:07:49 2024 -0400
+++ b/libinterp/corefcn/data.cc	Wed May 08 08:57:13 2024 -0400
@@ -7120,9 +7120,13 @@
         }
       else
         {
+          // Forbid vector or array input
           if (! args(1).is_scalar_type ())
             error ("sort: DIM must be a positive scalar integer");
-          dim = args(1).nint_value () - 1;
+
+          // Forbid fractional value input, also nan input.
+          dim = args(1).strict_int_value ("sort: DIM must be a positive scalar integer") - 1;
+
           if (dim < 0)
             error ("sort: DIM must be a positive scalar integer");
         }
@@ -7395,6 +7399,8 @@
 %!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 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")