Mercurial > hg > octave-lyh
changeset 17446:791c117eb2cf
fileparts.m: Check for multi-line char inputs (bug #40062)
* scripts/miscellaneous/fileparts.m: Validate input is not a multi-line
character matrix. Move input validation to front of function. Add %!error
input validation tests.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 18 Sep 2013 20:29:19 -0700 |
parents | cf5a8fccfc63 |
children | 000be929e835 |
files | scripts/miscellaneous/fileparts.m |
diffstat | 1 files changed, 35 insertions(+), 29 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/miscellaneous/fileparts.m +++ b/scripts/miscellaneous/fileparts.m @@ -25,38 +25,38 @@ function [directory, name, extension, version] = fileparts (filename) - if (nargin == 1) - if (ischar (filename)) - ds = strchr (filename, filesep ("all"), 1, "last"); - if (isempty (ds)) - ds = 0; - endif - es = rindex (filename, "."); - ## These can be the same if they are both 0 (no dir or ext). - if (es <= ds) - es = length (filename)+1; - endif - if (ds == 0) - directory = ""; - elseif (ds == 1) - directory = filename(1); - else - directory = filename(1:ds-1); - endif - name = filename(ds+1:es-1); - if (es > 0 && es <= length (filename)) - extension = filename(es:end); - else - extension = ""; - endif - version = ""; - else - error ("fileparts: expecting FILENAME argument to be a string"); - endif - else + if (nargin != 1) print_usage (); endif + if (! ischar (filename) || rows (filename) > 1) + error ("fileparts: FILENAME must be a single string"); + endif + + ds = strchr (filename, filesep ("all"), 1, "last"); + if (isempty (ds)) + ds = 0; + endif + es = rindex (filename, "."); + ## These can be the same if they are both 0 (no dir or ext). + if (es <= ds) + es = length (filename)+1; + endif + if (ds == 0) + directory = ""; + elseif (ds == 1) + directory = filename(1); + else + directory = filename(1:ds-1); + endif + name = filename(ds+1:es-1); + if (es > 0 && es <= length (filename)) + extension = filename(es:end); + else + extension = ""; + endif + version = ""; + endfunction @@ -96,3 +96,9 @@ %! [d, n, e] = fileparts (".ext"); %! assert (strcmp (d, "") && strcmp (n, char (zeros (1, 0))) && strcmp (e, ".ext")); +%% Test input validation +%!error fileparts () +%!error fileparts (1,2) +%!error <FILENAME must be a single string> fileparts (1) +%!error <FILENAME must be a single string> fileparts (["a"; "b"]) +