diff --git a/magick/cache.c b/magick/cache.c
index 5680068..5c2c20a 100644
--- a/magick/cache.c
+++ b/magick/cache.c
@@ -4629,12 +4629,6 @@
   length=(MagickSizeType) nexus_info->region.width*sizeof(IndexPacket);
   rows=nexus_info->region.height;
   number_pixels=length*rows;
-  if ((cache_info->columns == nexus_info->region.width) &&
-      (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
-    {
-      length=number_pixels;
-      rows=1UL;
-    }
   q=nexus_info->indexes;
   switch (cache_info->type)
   {
@@ -4647,6 +4641,12 @@
       /*
         Read indexes from memory.
       */
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       p=cache_info->indexes+offset;
       for (y=0; y < (long) rows; y++)
       {
@@ -4667,6 +4667,12 @@
             cache_info->cache_filename);
           return(MagickFalse);
         }
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels < MagickMaxBufferExtent))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       number_pixels=(MagickSizeType) cache_info->columns*cache_info->rows;
       for (y=0; y < (long) rows; y++)
       {
@@ -4754,12 +4760,6 @@
   length=(MagickSizeType) nexus_info->region.width*sizeof(PixelPacket);
   rows=nexus_info->region.height;
   number_pixels=length*rows;
-  if ((cache_info->columns == nexus_info->region.width) &&
-      (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
-    {
-      length=number_pixels;
-      rows=1UL;
-    }
   q=nexus_info->pixels;
   switch (cache_info->type)
   {
@@ -4772,6 +4772,12 @@
       /*
         Read pixels from memory.
       */
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       p=cache_info->pixels+offset;
       for (y=0; y < (long) rows; y++)
       {
@@ -4792,6 +4798,12 @@
             cache_info->cache_filename);
           return(MagickFalse);
         }
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels < MagickMaxBufferExtent))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       for (y=0; y < (long) rows; y++)
       {
         count=ReadPixelCacheRegion(cache_info,cache_info->offset+offset*
@@ -5333,12 +5345,6 @@
   length=(MagickSizeType) nexus_info->region.width*sizeof(IndexPacket);
   rows=nexus_info->region.height;
   number_pixels=(MagickSizeType) length*rows;
-  if ((cache_info->columns == nexus_info->region.width) &&
-      (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
-    {
-      length=number_pixels;
-      rows=1UL;
-    }
   p=nexus_info->indexes;
   switch (cache_info->type)
   {
@@ -5351,6 +5357,12 @@
       /*
         Write indexes to memory.
       */
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       q=cache_info->indexes+offset;
       for (y=0; y < (long) rows; y++)
       {
@@ -5371,6 +5383,12 @@
             cache_info->cache_filename);
           return(MagickFalse);
         }
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels < MagickMaxBufferExtent))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       number_pixels=(MagickSizeType) cache_info->columns*cache_info->rows;
       for (y=0; y < (long) rows; y++)
       {
@@ -5459,12 +5477,6 @@
   length=(MagickSizeType) nexus_info->region.width*sizeof(PixelPacket);
   rows=nexus_info->region.height;
   number_pixels=length*rows;
-  if ((cache_info->columns == nexus_info->region.width) &&
-      (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
-    {
-      length=number_pixels;
-      rows=1UL;
-    }
   p=nexus_info->pixels;
   switch (cache_info->type)
   {
@@ -5477,6 +5489,12 @@
       /*
         Write pixels to memory.
       */
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels == (MagickSizeType) ((size_t) number_pixels)))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       q=cache_info->pixels+offset;
       for (y=0; y < (long) rows; y++)
       {
@@ -5497,6 +5515,12 @@
             cache_info->cache_filename);
           return(MagickFalse);
         }
+      if ((cache_info->columns == nexus_info->region.width) &&
+          (number_pixels < MagickMaxBufferExtent))
+        {
+          length=number_pixels;
+          rows=1UL;
+        }
       for (y=0; y < (long) rows; y++)
       {
         count=WritePixelCacheRegion(cache_info,cache_info->offset+offset*