Index: /trunk/psLib/src/math/psPolynomialUtils.c
===================================================================
--- /trunk/psLib/src/math/psPolynomialUtils.c	(revision 10606)
+++ /trunk/psLib/src/math/psPolynomialUtils.c	(revision 10607)
@@ -180,36 +180,26 @@
 psPolynomial2D *psPolynomial2D_dX (psPolynomial2D *out, psPolynomial2D *poly)
 {
-    psPolynomial2D *dest = NULL;
     int nXout = poly->nX - 1;
     int nYout = poly->nY;
 
+    if (out == poly) {
+        psError(PS_ERR_UNKNOWN, false, "cannot assign output to input polynomial");
+        return NULL;
+    }
+
     if (poly->nX == 0)
         return NULL;
 
-    bool inPlace = false;
-
     if (out == NULL) {
-        dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
-        out = dest;
-    } else {
-        if (out == poly) {
-            inPlace = true;
-            dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
-        } else {
-            dest = out;
-            psPolynomial2DRecycle (dest, poly->type, nXout, nYout);
-        }
+        out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
+    } else {
+        psPolynomial2DRecycle (out, poly->type, nXout, nYout);
     }
 
     for (int i = 0; i < nXout + 1; i++) {
         for (int j = 0; j < nYout + 1; j++) {
-            dest->mask[i][j] = poly->mask[i+1][j];
-            dest->coeff[i][j] = poly->coeff[i+1][j] * (i+1);
-        }
-    }
-
-    if (inPlace) {
-        psFree (poly);
-        out = dest;
+            out->mask[i][j] = poly->mask[i+1][j];
+            out->coeff[i][j] = poly->coeff[i+1][j] * (i+1);
+        }
     }
     return out;
@@ -218,36 +208,26 @@
 psPolynomial2D *psPolynomial2D_dY (psPolynomial2D *out, psPolynomial2D *poly)
 {
-    psPolynomial2D *dest = NULL;
     int nXout = poly->nX;
     int nYout = poly->nY - 1;
 
+    if (out == poly) {
+        psError(PS_ERR_UNKNOWN, false, "cannot assign output to input polynomial");
+        return NULL;
+    }
+
     if (poly->nY == 0)
         return NULL;
 
-    bool inPlace = false;
-
     if (out == NULL) {
-        dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
-        out = dest;
-    } else {
-        if (out == poly) {
-            inPlace = true;
-            dest = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
-        } else {
-            dest = out;
-            psPolynomial2DRecycle (dest, poly->type, nXout, nYout);
-        }
+        out = psPolynomial2DAlloc (PS_POLYNOMIAL_ORD, nXout, nYout);
+    } else {
+        psPolynomial2DRecycle (out, poly->type, nXout, nYout);
     }
 
     for (int i = 0; i < nXout + 1; i++) {
         for (int j = 0; j < nYout + 1; j++) {
-            dest->mask[i][j] = poly->mask[i][j+1];
-            dest->coeff[i][j] = poly->coeff[i][j+1] * (j+1);
-        }
-    }
-
-    if (inPlace) {
-        psFree (poly);
-        out = dest;
+            out->mask[i][j] = poly->mask[i][j+1];
+            out->coeff[i][j] = poly->coeff[i][j+1] * (j+1);
+        }
     }
     return out;
