]> granicus.if.org Git - imagemagick/commitdiff
https://github.com/ImageMagick/ImageMagick/issues/1402
authorCristy <urban-warrior@imagemagick.org>
Mon, 3 Dec 2018 00:39:39 +0000 (19:39 -0500)
committerCristy <urban-warrior@imagemagick.org>
Mon, 3 Dec 2018 00:39:39 +0000 (19:39 -0500)
MagickCore/image.c
MagickCore/utility.c
MagickCore/utility.h

index 49cbad0729e327177e7e63585e82ea04e463c19c..d170bbc3b93183cb4c01291b950932bce073ec75 100644 (file)
@@ -2883,7 +2883,10 @@ MagickExport MagickBooleanType SetImageInfo(ImageInfo *image_info,
     {
       (void) CopyMagickString(magic,image_info->magick,MagickPathExtent);
       magick_info=GetMagickInfo(magic,sans_exception);
-      GetPathComponent(image_info->filename,CanonicalPath,component);
+      if (frames != 0)
+        GetPathComponent(image_info->filename,SubcanonicalPath,component);
+      else
+        GetPathComponent(image_info->filename,CanonicalPath,component);
       (void) CopyMagickString(image_info->filename,component,MagickPathExtent);
     }
   else
index 97ed83e601dfaec21c0063c76fbac33997da3a1e..616d28af66a5efd63cb91a6c61a93092de754259 100644 (file)
@@ -1235,24 +1235,27 @@ MagickExport void GetPathComponent(const char *path,PathType type,
   (void) CopyMagickString(component,path,MagickPathExtent);
   subimage_length=0;
   subimage_offset=0;
-  p=component+strlen(component)-1;
-  q=strrchr(component,'[');
-  if ((strlen(component) > 2) && (*p == ']') && (q != (char *) NULL) &&
-      ((q == component) || (*(q-1) != ']')) &&
-      (IsPathAccessible(path) == MagickFalse))
+  if (type != SubcanonicalPath)
     {
-      /*
-        Look for scene specification (e.g. img0001.pcd[4]).
-      */
-      *p='\0';
-      if ((IsSceneGeometry(q+1,MagickFalse) == MagickFalse) &&
-          (IsGeometry(q+1) == MagickFalse))
-        *p=']';
-      else
+      p=component+strlen(component)-1;
+      q=strrchr(component,'[');
+      if ((strlen(component) > 2) && (*p == ']') && (q != (char *) NULL) &&
+          ((q == component) || (*(q-1) != ']')) &&
+          (IsPathAccessible(path) == MagickFalse))
         {
-          subimage_length=(size_t) (p-q);
-          subimage_offset=magick_length+1+(size_t) (q-component);
-          *q='\0';
+          /*
+            Look for scene specification (e.g. img0001.pcd[4]).
+          */
+          *p='\0';
+          if ((IsSceneGeometry(q+1,MagickFalse) == MagickFalse) &&
+              (IsGeometry(q+1) == MagickFalse))
+            *p=']';
+          else
+            {
+              subimage_length=(size_t) (p-q);
+              subimage_offset=magick_length+1+(size_t) (q-component);
+              *q='\0';
+            }
         }
     }
   magick_length=0;
@@ -1365,6 +1368,7 @@ MagickExport void GetPathComponent(const char *path,PathType type,
         *component = '\0';
       break;
     }
+    case SubcanonicalPath:
     case CanonicalPath:
     case UndefinedPath:
       break;
index a2aa42af9031c562f0553fec45ca3541cfa83cf9..fc84d963e2bb3c8484fa8cc69671384de0a6dd2a 100644 (file)
@@ -32,7 +32,8 @@ typedef enum
   BasePath,
   ExtensionPath,
   SubimagePath,
-  CanonicalPath
+  CanonicalPath,
+  SubcanonicalPath 
 } PathType;
 
 extern MagickExport char