# HG changeset patch # User jwe # Date 1166809547 0 # Node ID 74ca56e4414cc96bc374d9657b455fab2e782462 # Parent 516d3071b34cf13dbc4745ac87f1edaa984698dc [project @ 2006-12-22 17:45:47 by jwe] diff -r 516d3071b34c -r 74ca56e4414c liboctave/ChangeLog --- a/liboctave/ChangeLog Fri Dec 15 03:24:13 2006 +0000 +++ b/liboctave/ChangeLog Fri Dec 22 17:45:47 2006 +0000 @@ -1,3 +1,9 @@ +2006-12-22 John W. Eaton + + * dim-vector.h (dim_vector::dim_vector): Always start with at + least 2 dimensions. + (dim_vector::resize): Don't allow resizing to fewer than 2 dimensions. + 2006-12-06 Michael Goffioul * lo-sysdep.cc (opendir): Avoid passing \\* to FindFirstFile. diff -r 516d3071b34c -r 74ca56e4414c liboctave/dim-vector.h --- a/liboctave/dim-vector.h Fri Dec 15 03:24:13 2006 +0000 +++ b/liboctave/dim-vector.h Fri Dec 22 17:45:47 2006 +0000 @@ -28,6 +28,7 @@ #include #include +#include "lo-error.h" #include "oct-types.h" class @@ -43,14 +44,23 @@ int ndims; int count; - dim_vector_rep (void) : dims (0), ndims (0), count (1) { } + dim_vector_rep (void) + : dims (new octave_idx_type [2]), ndims (2), count (1) + { + dims[0] = 0; + dims[1] = 0; + } - dim_vector_rep (octave_idx_type n) : dims (new octave_idx_type [1]), ndims (1), count (1) + + dim_vector_rep (octave_idx_type n) + : dims (new octave_idx_type [2]), ndims (2), count (1) { dims[0] = n; + dims[1] = 1; } - dim_vector_rep (octave_idx_type r, octave_idx_type c) : dims (new octave_idx_type [2]), ndims (2), count (1) + dim_vector_rep (octave_idx_type r, octave_idx_type c) + : dims (new octave_idx_type [2]), ndims (2), count (1) { dims[0] = r; dims[1] = c; @@ -75,7 +85,8 @@ } } - dim_vector_rep (octave_idx_type n, const dim_vector_rep *dv, int fill_value = 0) + dim_vector_rep (octave_idx_type n, const dim_vector_rep *dv, + int fill_value = 0) : dims ((dv && n > 0) ? new octave_idx_type [n] : 0), ndims (n > 0 ? n : 0), count (1) { @@ -200,6 +211,13 @@ if (n != len) { + if (n < 2) + { + (*current_liboctave_error_handler) + ("unable to resize object to fewer than 2 dimensions"); + return; + } + dim_vector_rep *old_rep = rep; rep = new dim_vector_rep (n, old_rep, fill_value);