On Tue, Feb 02, 2010 at 01:26:41AM -0500, John W. Eaton wrote: > On 1-Feb-2010, Bas Zoetekouw wrote: > > | Octave crashes when trying to filter() an empty vector: > | > | | octave:1> a=1; b=ones(10,1)/10; foo=filter(b,a,[]); > | | panic: Floating point exception -- stopping myself... > | | attempting to save variables to `octave-core'... > | | save to `octave-core' complete > | | zsh: floating point exception octave > | > | and I'm dropped back into the shell... > | > | Of course, filtering an empty vector doesnt make much sense, but it > certainly > | shouldn't cause a crash. > | FWIT, Matlab simple returns an empty vector. > | > | -- System Information: > | Debian Release: 5.0.4 > | APT prefers stable > | APT policy: (500, 'stable') > | Architecture: amd64 (x86_64) > | > | Kernel: Linux 2.6.26-2-amd64 (SMP w/1 CPU core) > | Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) > | Shell: /bin/sh linked to /bin/bash > > I checked in the following change: > > http://hg.savannah.gnu.org/hgweb/octave/rev/a277ba5da4dc > > I'm not sure this fix places the return in exactly the right > location. Should it be later in the function, after other dimension > checks? It would be nice if someone who is more familiar with how > filter is expected to work would comment. > > Also, in the future, please report bugs in Octave itself directly to > the b...@octave.org mailing list and use the Debian bug reporting > system for problems specific to the Debian package.
Attached is a test case for this. No changelog entry, I don't think this warrants one. Thomas
# HG changeset patch # User Thomas Weber <thomas.weber.m...@gmail.com> # Date 1265101668 -3600 # Node ID 4f93c55f6382906a7cdddff35a5b72b1c957bab2 # Parent 4ea0bda308b7e79bcc69eb7b7703a2151843abee Add test case for empty argument in filter() diff --git a/src/DLD-FUNCTIONS/filter.cc b/src/DLD-FUNCTIONS/filter.cc --- a/src/DLD-FUNCTIONS/filter.cc +++ b/src/DLD-FUNCTIONS/filter.cc @@ -735,6 +735,12 @@ %! y0 = zeros(4,4,2); y0(1:2,1:4,1) = +1; y0(1:2,1:4,2) = -1; %! y = filter(b, [1], x); %! assert(all(all(all(y==y0)))) +%! +%!test % test for empty X +%! a = 1; b = ones(10,1)/10; +%! result = filter(b,a,[]); +%! expected = []; +%! assert(result, expected); %% Should put some tests of the "DIM" parameter in here.