diff --git a/coders/label.c b/coders/label.c
index c4f6860..e554809 100644
--- a/coders/label.c
+++ b/coders/label.c
@@ -150,7 +150,8 @@
         (void) status;
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width > image->columns) && (height > image->rows))
+        if (((image->columns != 0) && (width > image->columns)) ||
+            ((image->rows != 0) && (height > image->rows)))
           break;
         draw_info->pointsize*=2.0;
       }
@@ -166,12 +167,13 @@
         status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width <= image->columns) && (height <= image->rows))
+        if (((image->columns != 0) && (width <= image->columns)) ||
+            ((image->rows != 0) && (height <= image->rows)))
           low=draw_info->pointsize+1.0;
         else
           high=draw_info->pointsize-1.0;
       }
-      for (draw_info->pointsize=(low+high)/2.0; (high-low) > 1.0; )
+      for (draw_info->pointsize=(low+high)/2.0; ; )
       {
         (void) FormatLocaleString(geometry,MaxTextExtent,"%+g%+g",
           -metrics.bounds.x1,metrics.ascent);
@@ -180,7 +182,8 @@
         status=GetMultilineTypeMetrics(image,draw_info,&metrics,exception);
         width=(size_t) floor(metrics.width+draw_info->stroke_width+0.5);
         height=(size_t) floor(metrics.height+draw_info->stroke_width+0.5);
-        if ((width <= image->columns) && (height <= image->rows))
+        if (((image->columns != 0) && (width <= image->columns)) ||
+            ((image->rows != 0) && (height <= image->rows)))
           break;
         draw_info->pointsize--;
       }