# HG changeset patch # User Antonius Burgers # Date 1641461902 -3600 # Node ID 09012191bb0c008bb092b8e5b26657fb0c5a5e1c # Parent 22ecbc9551a569a8aff3a39f6f0b1a7dbe8feec1 pinv: Improve input validation (Bug #61767). * pinv.cc (Fpinv): Early exit with error() for non-numeric input. Additional tests for input validation * inv.cc (Finv): Additional BIST tests for integer inputs. diff -r 22ecbc9551a5 -r 09012191bb0c libinterp/corefcn/inv.cc --- a/libinterp/corefcn/inv.cc Fri Jan 07 11:50:43 2022 +0100 +++ b/libinterp/corefcn/inv.cc Thu Jan 06 10:38:22 2022 +0100 @@ -238,6 +238,12 @@ %! assert (xinv, single ([-2, 1; 1.5, -0.5]), 5*eps ("single")); %! assert (isa (rcond, "single")); +## Basic test for integer inputs +%!assert (inv (int32 (2)), 0.5) +%!assert (inv (uint32 (2)), 0.5) +%!assert (inv (int64 (2)), 0.5) +%!assert (inv (uint64 (2)), 0.5) + ## Normal scalar cases %!assert (inv (2), 0.5) %!test @@ -380,6 +386,7 @@ %!error inv ([1, 2; 3, 4], 2) %!error inv ("Hello World") %!error inv ({1}) +%!error inv (true) %!error inv ([1, 2; 3, 4; 5, 6]) %!error inv (sparse (2, 2, 0)) %!error inv (diag ([0, 0])) diff -r 22ecbc9551a5 -r 09012191bb0c libinterp/corefcn/pinv.cc --- a/libinterp/corefcn/pinv.cc Fri Jan 07 11:50:43 2022 +0100 +++ b/libinterp/corefcn/pinv.cc Thu Jan 06 10:38:22 2022 +0100 @@ -64,6 +64,9 @@ octave_value arg = args(0); + if (! arg.isnumeric ()) + err_wrong_type_arg ("pinv", arg); + if (arg.isempty ()) return ovl (Matrix ()); @@ -197,6 +200,12 @@ %! y = pinv (x, 2); %! assert (diag (y), [1/3 1/2 0 0 0]'); +## Basic test for integer inputs +%!assert (pinv (int32 (2)), 0.5) +%!assert (pinv (uint32 (2)), 0.5) +%!assert (pinv (int64 (2)), 0.5) +%!assert (pinv (uint64 (2)), 0.5) + ## Test special case of 0 scalars and vectors %!assert (pinv (0), 0) %!assert (pinv ([0, 0, 0]), [0; 0; 0]) @@ -206,6 +215,12 @@ %!assert (pinv (complex ([0,0,0], [0,0,0])), [0; 0; 0]) %!assert (pinv (complex (single (0),0)), single (0)) %!assert (pinv (complex (single ([0,0,0]), [0,0,0])), single ([0; 0; 0])) + +## Test input validation +%!error pinv ("Hello World") +%!error pinv ({1}) +%!error pinv (true) + */ OCTAVE_NAMESPACE_END