# HG changeset patch # User Jordi GutiƩrrez Hermoso # Date 1331096561 18000 # Node ID 3d4bea9accd74eeeb195fcbaa2dd00106b677e3f # Parent ec660526ae50c3d3e3b17630b953df4979fdae6f Fix segfault on multidimensional median call (bug #35679). * Array.c (Array::nth_elemnt): Readjust dim after chopping singletons. * median.m: Add tests. diff -r ec660526ae50 -r 3d4bea9accd7 liboctave/Array.cc --- a/liboctave/Array.cc Mon Mar 05 09:33:07 2012 -0500 +++ b/liboctave/Array.cc Wed Mar 07 00:02:41 2012 -0500 @@ -2253,6 +2253,7 @@ dv(dim) = std::min (nn, ns); dv.chop_trailing_singletons (); + dim = std::min (dv.length (), dim); Array m (dv); diff -r ec660526ae50 -r 3d4bea9accd7 scripts/statistics/base/median.m --- a/scripts/statistics/base/median.m Mon Mar 05 09:33:07 2012 -0500 +++ b/scripts/statistics/base/median.m Wed Mar 07 00:02:41 2012 -0500 @@ -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]);