Index: trunk/psLib/src/math/psEllipse.c
===================================================================
--- trunk/psLib/src/math/psEllipse.c	(revision 13802)
+++ trunk/psLib/src/math/psEllipse.c	(revision 13959)
@@ -110,4 +110,12 @@
 {
     psEllipseAxes axes;
+    psEllipseAxes badValue = {NAN, NAN, NAN};
+
+    if (!isfinite(moments.x2)) return badValue;
+    if (!isfinite(moments.y2)) return badValue;
+    if (!isfinite(moments.xy)) return badValue;
+
+    if (moments.x2 < 0) return badValue;
+    if (moments.y2 < 0) return badValue;
 
     double g1 = moments.x2 + moments.y2;
@@ -139,4 +147,12 @@
 {
     psEllipseShape shape;
+    psEllipseShape badValue = {NAN, NAN, NAN};
+
+    if (!isfinite(axes.minor)) return badValue;
+    if (!isfinite(axes.major)) return badValue;
+    if (!isfinite(axes.theta)) return badValue;
+
+    if (axes.minor <= 0) return badValue;
+    if (axes.major <= 0) return badValue;
 
     double f1 = 1.0 / PS_SQR(axes.minor) + 1.0 / PS_SQR(axes.major);
@@ -145,4 +161,6 @@
     double sxr = 0.5*f1 - 0.5*f2*cos(2*axes.theta);
     double syr = 0.5*f1 + 0.5*f2*cos(2*axes.theta);
+
+    // sxr, syr cannot be < 0 (f1 >= f2)
 
     shape.sx  = +1.0 / sqrt(sxr);
