Index: trunk/psLib/src/math/psMinimizePolyFit.c
===================================================================
--- trunk/psLib/src/math/psMinimizePolyFit.c	(revision 36290)
+++ trunk/psLib/src/math/psMinimizePolyFit.c	(revision 36296)
@@ -715,4 +715,13 @@
 	sigma  = (sorted->data.F64[3 * sorted->n / 4] - sorted->data.F64[sorted->n / 4]); 
 	psFree(sorted);
+
+	if ((!isfinite(median))||
+	    (!isfinite(sigma))) {
+	  median = 0.0;
+	  sigma = 1.0;
+	}
+	if ((median == 0.0)&&(sigma == 1.0)) {
+	  scale = false;
+	}
 	// I can't see a way to not clobber x if it's already F64, so make a copy.x
 	z64 = psVectorCopy(NULL,x64,PS_TYPE_F64);
@@ -726,4 +735,5 @@
 	
 	result = VectorFitPolynomial1DOrd(poly, mask, maskValue, f64, fErr64, z64);
+	psFree(z64); // Done with this.
       }
       else {
@@ -736,9 +746,7 @@
       
       if (scale) {
-	psFree(z64); // Done with this.
-
 	// Undo scaling in the polynomial values.
-	psF64 *Zcoeff = psAlloc((1 + poly->nX) * sizeof(psF64 *));
-	psF64 *ZcoeffErr = psAlloc((1 + poly->nX) * sizeof(psF64 *));
+	psF64 *Zcoeff = psAlloc((1 + poly->nX) * sizeof(psF64));
+	psF64 *ZcoeffErr = psAlloc((1 + poly->nX) * sizeof(psF64));
 	
 	for (psS32 i = 0; i <= poly->nX; i++) {
@@ -757,5 +765,8 @@
 #if (CZW)
 	    printf("        %d %d %f %f %f %f => %f\n",
-		   i,j,Zcoeff[j],pow(1.0 / sigma,j) * pow(-1,j - i),pow(median,j - i),1.0 * psBinomialCoeff(j,i),
+		   i,j,Zcoeff[j],
+		   pow(1.0 / sigma,j) * pow(-1,j - i),
+		   pow(median,j - i),
+		   1.0 * psBinomialCoeff(j,i),
 		   Zcoeff[j] * pow(1.0 / sigma,j) * pow(-1,j  -i) * pow(median,j - i) * 1.0 * psBinomialCoeff(j,i)
 		   );
