Index: trunk/Ohana/src/libfits/include/gfitsio.h
===================================================================
--- trunk/Ohana/src/libfits/include/gfitsio.h	(revision 37807)
+++ trunk/Ohana/src/libfits/include/gfitsio.h	(revision 38062)
@@ -147,4 +147,5 @@
 
 int     gfits_init_matrix              PROTO((Matrix *matrix));
+off_t   gfits_npix_matrix              PROTO((Matrix *matrix));
 void   	gfits_add_matrix_value         PROTO((Matrix *matrix, off_t x, off_t y, double value)); 
 int    	gfits_convert_format           PROTO((Header *header, Matrix *matrix, int outBitpix, double outScale, double outZero, int inBlank, int outUnsign));
Index: trunk/Ohana/src/libfits/matrix/F_convert_format.c
===================================================================
--- trunk/Ohana/src/libfits/matrix/F_convert_format.c	(revision 37807)
+++ trunk/Ohana/src/libfits/matrix/F_convert_format.c	(revision 38062)
@@ -90,7 +90,8 @@
 
 /*********************** fits convert format ***********************************/
+/* this function is safe in the number of axes (can even be 0) */
 int gfits_convert_format (Header *header, Matrix *matrix, int outBitpix, double outScale, double outZero, int inBlank, int outUnsign) {
 
-  unsigned long i, nbytes, Npixels;
+  off_t i, nbytes;
   int    inBitpix, inUnsign;
   double inScale, inZero;
@@ -116,6 +117,6 @@
   gfits_modify_alt (header, "UNSIGN", "%t", 1, outUnsign);
 
-  Npixels          = header[0].Naxis[0]*header[0].Naxis[1];
-  nbytes           = Npixels * (abs(outBitpix) / 8);
+  off_t Npixels = gfits_npix_matrix (matrix);
+  nbytes                = Npixels * (abs(outBitpix) / 8);
 
   A = inScale / outScale;
Index: trunk/Ohana/src/libfits/matrix/F_create_M.c
===================================================================
--- trunk/Ohana/src/libfits/matrix/F_create_M.c	(revision 37807)
+++ trunk/Ohana/src/libfits/matrix/F_create_M.c	(revision 38062)
@@ -43,3 +43,15 @@
 }
 
-// XXX free buffer if non-null: need to double check for existing frees
+/*********************** return number of valid pixels *******************************/
+off_t gfits_npix_matrix (Matrix *matrix) {
+
+  if (!matrix->Naxes) return 0;
+
+  int i;
+  int Npix = 1;
+  for (i = 0; i < matrix->Naxes; i++) {
+    if (matrix->Naxis[i] == 0) break;
+    Npix *= matrix->Naxis[i];
+  }
+  return Npix;
+}
