From ae12904cc15142086867007b565e236c8dcd85f7 Mon Sep 17 00:00:00 2001
From: Dirk Lemstra <dirk@lemstra.org>
Date: Sat, 24 Nov 2018 08:39:54 +0100
Subject: [PATCH] Moved attaching of the layers to a separate method.

---
 coders/psd.c | 62 +++++++++++++++++++++++++++++-----------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/coders/psd.c b/coders/psd.c
index 40236c6ba..d972ff27a 100644
--- a/coders/psd.c
+++ b/coders/psd.c
@@ -1588,6 +1588,40 @@ static MagickBooleanType CheckPSDChannels(const PSDInfo *psd_info,
   return(MagickFalse);
 }
 
+static void AttachPSDLayers(Image *image,LayerInfo *layer_info,
+  ssize_t number_layers)
+{
+  register ssize_t
+    i;
+
+  ssize_t
+    j;
+
+  for (i=0; i < number_layers; i++)
+  {
+    if (layer_info[i].image == (Image *) NULL)
+      {
+        for (j=i; j < number_layers - 1; j++)
+          layer_info[j] = layer_info[j+1];
+        number_layers--;
+        i--;
+      }
+  }
+  if (number_layers == 0)
+    return;
+  for (i=0; i < number_layers; i++)
+  {
+    if (i > 0)
+      layer_info[i].image->previous=layer_info[i-1].image;
+    if (i < (number_layers-1))
+      layer_info[i].image->next=layer_info[i+1].image;
+    layer_info[i].image->page=layer_info[i].page;
+  }
+  image->next=layer_info[0].image;
+  layer_info[0].image->previous=image;
+  layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info);
+}
+
 static MagickBooleanType ReadPSDLayersInternal(Image *image,
   const ImageInfo *image_info,const PSDInfo *psd_info,
   const MagickBooleanType skip_layers,ExceptionInfo *exception)
@@ -1948,33 +1982,7 @@ static MagickBooleanType ReadPSDLayersInternal(Image *image,
     }
 
   if (status != MagickFalse)
-    {
-      for (i=0; i < number_layers; i++)
-      {
-        if (layer_info[i].image == (Image *) NULL)
-          {
-            for (j=i; j < number_layers - 1; j++)
-              layer_info[j] = layer_info[j+1];
-            number_layers--;
-            i--;
-          }
-      }
-
-      if (number_layers > 0)
-        {
-          for (i=0; i < number_layers; i++)
-          {
-            if (i > 0)
-              layer_info[i].image->previous=layer_info[i-1].image;
-            if (i < (number_layers-1))
-              layer_info[i].image->next=layer_info[i+1].image;
-            layer_info[i].image->page=layer_info[i].page;
-          }
-          image->next=layer_info[0].image;
-          layer_info[0].image->previous=image;
-        }
-      layer_info=(LayerInfo *) RelinquishMagickMemory(layer_info);
-    }
+    AttachPSDLayers(image,layer_info,number_layers);
   else
     layer_info=DestroyLayerInfo(layer_info,number_layers);
 
-- 
2.40.0