Mercurial > octave
changeset 30934:d7f799e6d836
Check that dimensions input arguments for ones/zeros/... are scalar (bug #62291).
* libinterp/corefcn/data.cc (fill_matrix): Check that dimensions input arguments
are scalar. Add BISTs.
author | Markus Mützel <markus.muetzel@gmx.de> |
---|---|
date | Tue, 12 Apr 2022 18:31:18 +0200 |
parents | b6fb3e2a2024 |
children | 30f7f409861a |
files | libinterp/corefcn/data.cc |
diffstat | 1 files changed, 56 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/corefcn/data.cc Wed Apr 13 19:30:14 2022 +0200 +++ b/libinterp/corefcn/data.cc Tue Apr 12 18:31:18 2022 +0200 @@ -4148,7 +4148,12 @@ dims.resize (nargin); for (int i = 0; i < nargin; i++) - dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + { + if (args(i).numel () > 1) + error ("%s: dimensions must be scalars.", fcn); + + dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + } } break; } @@ -4300,7 +4305,12 @@ dims.resize (nargin); for (int i = 0; i < nargin; i++) - dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + { + if (args(i).numel () > 1) + error ("%s: dimensions must be scalars.", fcn); + + dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + } } break; } @@ -4382,7 +4392,12 @@ dims.resize (nargin); for (int i = 0; i < nargin; i++) - dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + { + if (args(i).numel () > 1) + error ("%s: dimensions must be scalars.", fcn); + + dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + } } break; } @@ -4446,7 +4461,12 @@ dims.resize (nargin); for (int i = 0; i < nargin; i++) - dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + { + if (args(i).numel () > 1) + error ("%s: dimensions must be scalars.", fcn); + + dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + } } break; } @@ -4524,7 +4544,12 @@ dims.resize (nargin); for (int i = 0; i < nargin; i++) - dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + { + if (args(i).numel () > 1) + error ("%s: dimensions must be scalars.", fcn); + + dims(i) = (args(i).isempty () ? 0 : args(i).idx_type_value (true)); + } } break; } @@ -4618,6 +4643,10 @@ %!error <conversion of 1.1 .*failed> ones (1, 1.1) %!error <conversion of 1.1 .*failed> ones ([1, 1.1]) %!error <sparse ND .* not supported> ones (3, 3, 3, "like", speye (1)) +%!error <must be scalar> ones (1:3, 1) +%!error <must be scalar> ones (1, 1:3) +%!error <must be scalar> ones (1, 2, 1:3) +%!error <must be scalar> ones (1:3, 1, "like", single (1)) */ /* @@ -4699,6 +4728,10 @@ %!error <conversion of 1.1 .*failed> zeros (1, 1.1, 2) %!error <conversion of 1.1 .*failed> zeros ([1, 1.1, 2]) %!error <sparse ND .* not supported> zeros (3, 3, 3, "like", speye (1)) +%!error <must be scalar> zeros (1:3, 1) +%!error <must be scalar> zeros (1, 1:3) +%!error <must be scalar> zeros (1, 2, 1:3) +%!error <must be scalar> zeros (1:3, 1, "like", single (1)) */ DEFUN (Inf, args, , @@ -4772,6 +4805,10 @@ %!error Inf (3, 4, 5, "int8") %!error <input .* floating> Inf (3, 3, "like", true) %!error <input .* floating> Inf (2, "like", uint8 (1)) +%!error <must be scalar> Inf (1:3, 1) +%!error <must be scalar> Inf (1, 1:3) +%!error <must be scalar> Inf (1, 2, 1:3) +%!error <must be scalar> Inf (1:3, 1, "like", single (1)) */ DEFUN (NaN, args, , @@ -4853,6 +4890,10 @@ %!error NaN (3, 4, 5, "int8") %!error <input .* floating> NaN (3, 3, "like", true) %!error <input .* floating> NaN (2, "like", uint8 (1)) +%!error <must be scalar> NaN (1:3, 1) +%!error <must be scalar> NaN (1, 1:3) +%!error <must be scalar> NaN (1, 2, 1:3) +%!error <must be scalar> NaN (1:3, 1, "like", single (1)) */ DEFUN (e, args, , @@ -5005,6 +5046,10 @@ %!assert (eps (single ([1/2 1 2 realmax("single") 0 realmin("single")/2 realmin("single")/16 Inf NaN])), %! single ([2^-24 2^-23 2^-22 2^104 2^-149 2^-149 2^-149 NaN NaN])) %!error <X must be of a floating point type> eps (uint8 ([0 1 2])) +%!error <must be scalar> eps (1:3, 1) +%!error <must be scalar> eps (1, 1:3) +%!error <must be scalar> eps (1, 2, 1:3) +%!error <must be scalar> eps (1:3, 1, "single") */ DEFUN (pi, args, , @@ -5245,6 +5290,9 @@ %!error false (2, 3, "double") %!error <input .* logical> false (2, 1, "like", sparse (1)) +%!error <must be scalar> false (1:3, 1) +%!error <must be scalar> false (1, 1:3) +%!error <must be scalar> false (1, 2, 1:3) */ DEFUN (true, args, , @@ -5277,6 +5325,9 @@ %!error true (2, 3, "double") %!error <input .* logical> true (2, 1, "like", double (1)) +%!error <must be scalar> true (1:3, 1) +%!error <must be scalar> true (1, 1:3) +%!error <must be scalar> true (1, 2, 1:3) */ template <typename MT>