# HG changeset patch # User Philip Nienhuis # Date 1340655956 -7200 # Node ID d5aee269b770c2b2fb2ff4c1c903fd1bbc049de3 # Parent 3c5e6971064cc4bd5e12898f2a679bfe8dc108f1 strread.m: catch unsupported ML format specifiers (bug #36464) diff --git a/scripts/io/strread.m b/scripts/io/strread.m --- a/scripts/io/strread.m +++ b/scripts/io/strread.m @@ -301,6 +301,13 @@ ## Format conversion specifiers following literals w/o space/delim ## in between are separate now. Separate those w trailing literals idy2 = find (! cellfun ("isempty", strfind (fmt_words, "%"))); + + ## Check for unsupported format specifiers + errpat = '(\[.*\]|[cq]|[nfdu]8|[nfdu]16|[nfdu]32|[nfdu]64)'; + if (! all (cellfun ("isempty", regexp (fmt_words(idy2), errpat)))) + error ("strread: %q, %c, %[] or bit width format specifiers are not supported yet."); + endif + a = strfind (fmt_words(idy2), "%"); b = regexp (fmt_words(idy2), '[nfdus]', 'end'); for jj = 1:numel (a) @@ -931,3 +938,19 @@ %! assert (isempty (b)); %! assert (isempty (c)); +%% Unsupported format specifiers +%!test +%!error strread ('a', '%c') +%!error strread ('a', '%*c %d') +%!error strread ('a', '%q') +%!error strread ('a', '%*q %d') +%!error strread ('a', '%[a]') +%!error strread ('a', '%*[a] %d') +%!error strread ('a', '%[^a]') +%!error strread ('a', '%*[â] %d') +%!error strread ('a', '%d8') +%!error strread ('a', '%*d8 %s') +%!error strread ('a', '%f64') +%!error strread ('a', '%*f64 %s') +%!error strread ('a', '%u32') +%!error strread ('a', '%*u32 %d')