diff liboctave/idx-vector.cc @ 9757:95ad9c2a27e2

fix idx_vector construction checks
author Jaroslav Hajek <highegg@gmail.com>
date Fri, 23 Oct 2009 10:35:59 +0200
parents aea3a3a950e1
children 3ac8ea48279b
line wrap: on
line diff
--- a/liboctave/idx-vector.cc	Fri Oct 23 10:10:37 2009 +0200
+++ b/liboctave/idx-vector.cc	Fri Oct 23 10:35:59 2009 +0200
@@ -95,14 +95,14 @@
 
 idx_vector::idx_range_rep::idx_range_rep (octave_idx_type _start, octave_idx_type _limit,
                                           octave_idx_type _step)
- : start(_start), len (_step ? (_limit - _start) / _step : -1), step (_step)
+ : start(_start), len (_step ? std::max((_limit - _start) / _step, 0) : -1), step (_step)
 {
   if (len < 0)
     {
       gripe_invalid_range ();
       err = true;
     }
-  else if (start < 0)
+  else if (start < 0 || (step < 0 && start + (len-1)*step < 0))
     {
       gripe_invalid_index ();
       err = true;
@@ -557,6 +557,8 @@
         if (length (0) > 1)
           retval = elem (1) - elem (0);
       }
+    default:
+      break;
     }
   return retval;
 }