Index: trunk/psphot/src/psphotSourceFits.c
===================================================================
--- trunk/psphot/src/psphotSourceFits.c	(revision 23957)
+++ trunk/psphot/src/psphotSourceFits.c	(revision 23978)
@@ -234,8 +234,10 @@
     pmSource *tmpSrc = pmSourceAlloc ();
 
+    // XXX need to handle failures better here
     pmModel *EXT = psphotFitEXT (readout, source, modelTypeEXT, maskVal, markVal);
     okEXT = psphotEvalEXT (tmpSrc, EXT);
-    chiEXT = EXT->chisq / EXT->nDOF;
-
+    chiEXT = EXT ? EXT->chisq / EXT->nDOF : NAN;
+
+    // DBL will always be defined, but DBL->data[n] might not
     psArray *DBL = psphotFitDBL (readout, source, maskVal, markVal);
     okDBL  = psphotEvalDBL (tmpSrc, DBL->data[0]);
@@ -244,15 +246,18 @@
 
     // correct first model chisqs for flux trend
+    chiDBL = NAN;
     ONE = DBL->data[0];
-    chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
-    ONE->chisqNorm = ONE->chisq / chiTrend;
-
-    // save chisq for double-star/galaxy comparison
-    chiDBL = ONE->chisq / ONE->nDOF;
+    if (ONE) {
+      chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
+      ONE->chisqNorm = ONE->chisq / chiTrend;
+      chiDBL = ONE->chisq / ONE->nDOF; // save chisq for double-star/galaxy comparison
+    }
 
     // correct second model chisqs for flux trend
     ONE = DBL->data[1];
-    chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
-    ONE->chisqNorm = ONE->chisq / chiTrend;
+    if (ONE) {
+      chiTrend = psPolynomial1DEval (psf->ChiTrend, ONE->params->data.F32[1]);
+      ONE->chisqNorm = ONE->chisq / chiTrend;
+    }
 
     psFree (tmpSrc);
