]> granicus.if.org Git - imagemagick/blobdiff - MagickCore/magic.c
Update web pages
[imagemagick] / MagickCore / magic.c
index 83be1e68a89f12ba5069e2276c71dacf42f082c8..5d446ee55427eb9bcbae7e774002dff933c26256 100644 (file)
@@ -251,7 +251,11 @@ static int CompareMagickInfoSize(const void *a,const void *b)
 
   ma=(MagicInfo *) a;
   mb=(MagicInfo *) b;
-  return((int) ((mb->offset+mb->length)-(ma->offset+ma->length)));
+
+  if (ma->offset != mb->offset)
+    return((int) (ma->offset-mb->offset));
+
+  return((int) (mb->length-ma->length));
 }
 
 static LinkedListInfo *AcquireMagicCache(const char *filename,
@@ -420,20 +424,28 @@ MagickExport size_t GetMagicPatternExtent(ExceptionInfo *exception)
   register const MagicInfo
     *p;
 
+  size_t
+    magickSize,
+    max;
+
   static size_t
-    size = 0;
+    size=0;
 
   assert(exception != (ExceptionInfo *) NULL);
   if ((size != 0) || (IsMagicCacheInstantiated(exception) == MagickFalse))
     return(size);
-  /*
-    The list is sorted so we can use the size of the first value.
-  */
   LockSemaphoreInfo(magic_semaphore);
   ResetLinkedListIterator(magic_cache);
+  max=0;
   p=(const MagicInfo *) GetNextValueInLinkedList(magic_cache);
-  if (p != (const MagicInfo *) NULL)
-    size=(size_t) (p->offset+p->length);
+  while (p != (const MagicInfo *) NULL)
+  {
+    magickSize=(size_t) (p->offset+p->length);
+    if (magickSize > max)
+      max=magickSize;
+    p=(const MagicInfo *) GetNextValueInLinkedList(magic_cache);
+  }
+  size=max;
   UnlockSemaphoreInfo(magic_semaphore);
   return(size);
 }