diff --git a/Geo/GeoInterpolation.cpp b/Geo/GeoInterpolation.cpp
index 1270eb7c46615370673642159b95a71192af480c..0e81a9a6ef89d5011aa00a5b2be91bca77f635d3 100644
--- a/Geo/GeoInterpolation.cpp
+++ b/Geo/GeoInterpolation.cpp
@@ -135,12 +135,14 @@ SPoint2 InterpolateCubicSpline(Vertex *v[4], double t, double mat[4][4],
   }
   return p;
 }
+
 // Bezier
 static Vertex InterpolateBezier(Curve *Curve, double u, int derivee)
 {
   int NbCurves = (List_Nbr(Curve->Control_Points) - 1) / 3;
   int iCurve = (int)floor(u * (double)NbCurves);
-  if(iCurve == NbCurves) iCurve -= 1; // u = 1
+  if(iCurve >= NbCurves) iCurve = NbCurves - 1; // u = 1
+  if(iCurve <= 0) iCurve = 0;
   double t1 = (double)(iCurve) / (double)(NbCurves);
   double t2 = (double)(iCurve+1) / (double)(NbCurves);
   double t = (u - t1) / (t2 - t1);