Mercurial > hg > octave-terminal
changeset 14440:3d4bea9accd7 stable
Fix segfault on multidimensional median call (bug #35679).
* Array.c (Array::nth_elemnt): Readjust dim after chopping singletons.
* median.m: Add tests.
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Wed, 07 Mar 2012 00:02:41 -0500 |
parents | ec660526ae50 |
children | d27e638b1c3a |
files | liboctave/Array.cc scripts/statistics/base/median.m |
diffstat | 2 files changed, 11 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/liboctave/Array.cc +++ b/liboctave/Array.cc @@ -2253,6 +2253,7 @@ dv(dim) = std::min (nn, ns); dv.chop_trailing_singletons (); + dim = std::min (dv.length (), dim); Array<T> m (dv);
--- a/scripts/statistics/base/median.m +++ b/scripts/statistics/base/median.m @@ -99,6 +99,16 @@ %! assert(median ([x2, 2*x2]) == [3.5, 7]); %! assert(median ([y2, 3*y2]) == [4, 12]); +%% Test multidimensional arrays (bug #35679) +%!shared a, b, x, y +%! rand ("seed", 2); +%! a = rand (2,3,4,5); +%! b = rand (3,4,6,5); +%! x = sort (a, 4); +%! y = sort (b, 3); +%!assert (median (a, 4), x(:, :, :, 3)); +%!assert (median (b, 3), (y(:, :, 3, :) + y(:, :, 4, :))/2); + %!assert(median (single([1,2,3])), single(2)); %!assert(median ([1,2,NaN;4,5,6;NaN,8,9]), [NaN, 5, NaN]);