diff --git a/magick/magic.c b/magick/magic.c
index d3dd5f4..3300abb 100644
--- a/magick/magic.c
+++ b/magick/magic.c
@@ -66,131 +66,130 @@
   const char
     *name;
 
+  const MagickOffsetType
+    offset;
+
   const unsigned char
     *magic;
 
-  size_t
+  const size_t
     length;
-
-  MagickOffsetType
-    offset;
 } MagicMapInfo;
 
-#define MagicTransform(name,offset,magic) \
-   { name, (const unsigned char *) magic, sizeof(magic)-1, offset }
+#define MagickString(magic)  (const unsigned char *) (magic), sizeof(magic)-1
 
 static const MagicMapInfo
   MagicMap[] =
   {
-    MagicTransform("AVI", 0, "RIFF"),
-    MagicTransform("8BIMWTEXT", 0, "8\000B\000I\000M\000#"),
-    MagicTransform("8BIMTEXT", 0, "8BIM#"),
-    MagicTransform("8BIM", 0, "8BIM"),
-    MagicTransform("BMP", 0, "BA"),
-    MagicTransform("BMP", 0, "BM"),
-    MagicTransform("BMP", 0, "CI"),
-    MagicTransform("BMP", 0, "CP"),
-    MagicTransform("BMP", 0, "IC"),
-    MagicTransform("BMP", 0, "PI"),
-    MagicTransform("CALS", 21, "version: MIL-STD-1840"),
-    MagicTransform("CALS", 0, "srcdocid:"),
-    MagicTransform("CALS", 9, "srcdocid:"),
-    MagicTransform("CALS", 8, "rorient:"),
-    MagicTransform("CGM", 0, "BEGMF"),
-    MagicTransform("CIN", 0, "\200\052\137\327"),
-    MagicTransform("CRW", 0, "II\x1a\x00\x00\x00HEAPCCDR"),
-    MagicTransform("DCM", 128, "DICM"),
-    MagicTransform("DCX", 0, "\261\150\336\72"),
-    MagicTransform("DIB", 0, "\050\000"),
-    MagicTransform("DDS", 0, "DDS "),
-    MagicTransform("DJVU", 0, "AT&TFORM"),
-    MagicTransform("DOT", 0, "digraph"),
-    MagicTransform("DPX", 0, "SDPX"),
-    MagicTransform("DPX", 0, "XPDS"),
-    MagicTransform("EMF", 40, "\040\105\115\106\000\000\001\000"),
-    MagicTransform("EPT", 0, "\305\320\323\306"),
-    MagicTransform("EXR", 0, "\166\057\061\001"),
-    MagicTransform("FAX", 0, "DFAX"),
-    MagicTransform("FIG", 0, "#FIG"),
-    MagicTransform("FITS", 0, "IT0"),
-    MagicTransform("FITS", 0, "SIMPLE"),
-    MagicTransform("FPX", 0, "\320\317\021\340"),
-    MagicTransform("GIF", 0, "GIF8"),
-    MagicTransform("GPLT", 0, "#!/usr/local/bin/gnuplot"),
-    MagicTransform("HDF", 1, "HDF"),
-    MagicTransform("HPGL", 0, "IN;"),
-    MagicTransform("HPGL", 0, "\033E\033"),
-    MagicTransform("HTML", 1, "HTML"),
-    MagicTransform("HTML", 1, "html"),
-    MagicTransform("ILBM", 8, "ILBM"),
-    MagicTransform("IPTCWTEXT", 0, "\062\000#\000\060\000=\000\042\000&\000#\000\060\000;\000&\000#\000\062\000;\000\042\000"),
-    MagicTransform("IPTCTEXT", 0, "2#0=\042�\042"),
-    MagicTransform("IPTC", 0, "\034\002"),
-    MagicTransform("JNG", 0, "\213JNG\r\n\032\n"),
-    MagicTransform("JPEG", 0, "\377\330\377"),
-    MagicTransform("JPC", 0, "\377\117"),
-    MagicTransform("JP2", 4, "\152\120\040\040\015"),
-    MagicTransform("MIFF", 0, "Id=ImageMagick"),
-    MagicTransform("MIFF", 0, "id=ImageMagick"),
-    MagicTransform("MNG", 0, "\212MNG\r\n\032\n"),
-    MagicTransform("MPC", 0, "id=MagickCache"),
-    MagicTransform("MPEG", 0, "\000\000\001\263"),
-    MagicTransform("MRW", 0, "\x00MRM"),
-    MagicTransform("MVG", 0, "push graphic-context"),
-    MagicTransform("ORF", 0, "IIRO\x08\x00\x00\x00"),
-    MagicTransform("PCD", 2048, "PCD_"),
-    MagicTransform("PCL", 0, "\033E\033"),
-    MagicTransform("PCX", 0, "\012\002"),
-    MagicTransform("PCX", 0, "\012\005"),
-    MagicTransform("PDB", 60, "vIMGView"),
-    MagicTransform("PDF", 0, "%PDF-"),
-    MagicTransform("PFA", 0, "%!PS-AdobeFont-1.0"),
-    MagicTransform("PFB", 6, "%!PS-AdobeFont-1.0"),
-    MagicTransform("PGX", 0, "\050\107\020\115\046"),
-    MagicTransform("PICT", 522, "\000\021\002\377\014\000"),
-    MagicTransform("PNG", 0, "\211PNG\r\n\032\n"),
-    MagicTransform("PNM", 0, "P1"),
-    MagicTransform("PNM", 0, "P2"),
-    MagicTransform("PNM", 0, "P3"),
-    MagicTransform("PNM", 0, "P4"),
-    MagicTransform("PNM", 0, "P5"),
-    MagicTransform("PNM", 0, "P6"),
-    MagicTransform("PNM", 0, "P7"),
-    MagicTransform("PNM", 0, "PF"),
-    MagicTransform("PNM", 0, "Pf"),
-    MagicTransform("PS", 0, "%!"),
-    MagicTransform("PS", 0, "\004%!"),
-    MagicTransform("PS", 0, "\305\320\323\306"),
-    MagicTransform("PSD", 0, "8BPS"),
-    MagicTransform("PWP", 0, "SFW95"),
-    MagicTransform("RAF", 0, "FUJIFILMCCD-RAW "),
-    MagicTransform("RAD", 0, "#?RADIANCE"),
-    MagicTransform("RAD", 0, "VIEW= "),
-    MagicTransform("RLE", 0, "\122\314"),
-    MagicTransform("SCT", 0, "CT"),
-    MagicTransform("SFW", 0, "SFW94"),
-    MagicTransform("SGI", 0, "\001\332"),
-    MagicTransform("SUN", 0, "\131\246\152\225"),
-    MagicTransform("SVG", 1, "?XML"),
-    MagicTransform("SVG", 1, "?xml"),
-    MagicTransform("TIFF", 0, "\115\115\000\052"),
-    MagicTransform("TIFF", 0, "\111\111\052\000"),
-    MagicTransform("TIFF64", 0, "\115\115\000\053\000\010\000\000"),
-    MagicTransform("TIFF64", 0, "\111\111\053\000\010\000\000\000"),
-    MagicTransform("TXT", 0, "# ImageMagick pixel enumeration:"),
-    MagicTransform("VICAR", 0, "LBLSIZE"),
-    MagicTransform("VICAR", 0, "NJPL1I"),
-    MagicTransform("VIFF", 0, "\253\001"),
-    MagicTransform("WMF", 0, "\327\315\306\232"),
-    MagicTransform("WMF", 0, "\001\000\011\000"),
-    MagicTransform("WPG", 0, "\377WPC"),
-    MagicTransform("XBM", 0, "#define"),
-    MagicTransform("XCF", 0, "gimp xcf"),
-    MagicTransform("XEF", 0, "FOVb"),
-    MagicTransform("XPM", 1, "* XPM *"),
-    MagicTransform("XWD", 4, "\007\000\000"),
-    MagicTransform("XWD", 5, "\000\000\007"),
-    MagicTransform((const char *) NULL, 0, (const char *) NULL)
+    { "AVI", 0, MagickString("RIFF") },
+    { "8BIMWTEXT", 0, MagickString("8\000B\000I\000M\000#") },
+    { "8BIMTEXT", 0, MagickString("8BIM#") },
+    { "8BIM", 0, MagickString("8BIM") },
+    { "BMP", 0, MagickString("BA") },
+    { "BMP", 0, MagickString("BM") },
+    { "BMP", 0, MagickString("CI") },
+    { "BMP", 0, MagickString("CP") },
+    { "BMP", 0, MagickString("IC") },
+    { "BMP", 0, MagickString("PI") },
+    { "CALS", 21, MagickString("version: MIL-STD-1840") },
+    { "CALS", 0, MagickString("srcdocid:") },
+    { "CALS", 9, MagickString("srcdocid:") },
+    { "CALS", 8, MagickString("rorient:") },
+    { "CGM", 0, MagickString("BEGMF") },
+    { "CIN", 0, MagickString("\200\052\137\327") },
+    { "CRW", 0, MagickString("II\x1a\x00\x00\x00HEAPCCDR") },
+    { "DCM", 128, MagickString("DICM") },
+    { "DCX", 0, MagickString("\261\150\336\72") },
+    { "DIB", 0, MagickString("\050\000") },
+    { "DDS", 0, MagickString("DDS ") },
+    { "DJVU", 0, MagickString("AT&TFORM") },
+    { "DOT", 0, MagickString("digraph") },
+    { "DPX", 0, MagickString("SDPX") },
+    { "DPX", 0, MagickString("XPDS") },
+    { "EMF", 40, MagickString("\040\105\115\106\000\000\001\000") },
+    { "EPT", 0, MagickString("\305\320\323\306") },
+    { "EXR", 0, MagickString("\166\057\061\001") },
+    { "FAX", 0, MagickString("DFAX") },
+    { "FIG", 0, MagickString("#FIG") },
+    { "FITS", 0, MagickString("IT0") },
+    { "FITS", 0, MagickString("SIMPLE") },
+    { "FPX", 0, MagickString("\320\317\021\340") },
+    { "GIF", 0, MagickString("GIF8") },
+    { "GPLT", 0, MagickString("#!/usr/local/bin/gnuplot") },
+    { "HDF", 1, MagickString("HDF") },
+    { "HPGL", 0, MagickString("IN;") },
+    { "HPGL", 0, MagickString("\033E\033") },
+    { "HTML", 1, MagickString("HTML") },
+    { "HTML", 1, MagickString("html") },
+    { "ILBM", 8, MagickString("ILBM") },
+    { "IPTCWTEXT", 0, MagickString("\062\000#\000\060\000=\000\042\000&\000#\000\060\000;\000&\000#\000\062\000;\000\042\000") },
+    { "IPTCTEXT", 0, MagickString("2#0=\042�\042") },
+    { "IPTC", 0, MagickString("\034\002") },
+    { "JNG", 0, MagickString("\213JNG\r\n\032\n") },
+    { "JPEG", 0, MagickString("\377\330\377") },
+    { "JPC", 0, MagickString("\377\117") },
+    { "JP2", 4, MagickString("\152\120\040\040\015") },
+    { "MIFF", 0, MagickString("Id=ImageMagick") },
+    { "MIFF", 0, MagickString("id=ImageMagick") },
+    { "MNG", 0, MagickString("\212MNG\r\n\032\n") },
+    { "MPC", 0, MagickString("id=MagickCache") },
+    { "MPEG", 0, MagickString("\000\000\001\263") },
+    { "MRW", 0, MagickString("\x00MRM") },
+    { "MVG", 0, MagickString("push graphic-context") },
+    { "ORF", 0, MagickString("IIRO\x08\x00\x00\x00") },
+    { "PCD", 2048, MagickString("PCD_") },
+    { "PCL", 0, MagickString("\033E\033") },
+    { "PCX", 0, MagickString("\012\002") },
+    { "PCX", 0, MagickString("\012\005") },
+    { "PDB", 60, MagickString("vIMGView") },
+    { "PDF", 0, MagickString("%PDF-") },
+    { "PFA", 0, MagickString("%!PS-AdobeFont-1.0") },
+    { "PFB", 6, MagickString("%!PS-AdobeFont-1.0") },
+    { "PGX", 0, MagickString("\050\107\020\115\046") },
+    { "PICT", 522, MagickString("\000\021\002\377\014\000") },
+    { "PNG", 0, MagickString("\211PNG\r\n\032\n") },
+    { "PNM", 0, MagickString("P1") },
+    { "PNM", 0, MagickString("P2") },
+    { "PNM", 0, MagickString("P3") },
+    { "PNM", 0, MagickString("P4") },
+    { "PNM", 0, MagickString("P5") },
+    { "PNM", 0, MagickString("P6") },
+    { "PNM", 0, MagickString("P7") },
+    { "PNM", 0, MagickString("PF") },
+    { "PNM", 0, MagickString("Pf") },
+    { "PS", 0, MagickString("%!") },
+    { "PS", 0, MagickString("\004%!") },
+    { "PS", 0, MagickString("\305\320\323\306") },
+    { "PSD", 0, MagickString("8BPS") },
+    { "PWP", 0, MagickString("SFW95") },
+    { "RAF", 0, MagickString("FUJIFILMCCD-RAW ") },
+    { "RAD", 0, MagickString("#?RADIANCE") },
+    { "RAD", 0, MagickString("VIEW= ") },
+    { "RLE", 0, MagickString("\122\314") },
+    { "SCT", 0, MagickString("CT") },
+    { "SFW", 0, MagickString("SFW94") },
+    { "SGI", 0, MagickString("\001\332") },
+    { "SUN", 0, MagickString("\131\246\152\225") },
+    { "SVG", 1, MagickString("?XML") },
+    { "SVG", 1, MagickString("?xml") },
+    { "TIFF", 0, MagickString("\115\115\000\052") },
+    { "TIFF", 0, MagickString("\111\111\052\000") },
+    { "TIFF64", 0, MagickString("\115\115\000\053\000\010\000\000") },
+    { "TIFF64", 0, MagickString("\111\111\053\000\010\000\000\000") },
+    { "TXT", 0, MagickString("# ImageMagick pixel enumeration:") },
+    { "VICAR", 0, MagickString("LBLSIZE") },
+    { "VICAR", 0, MagickString("NJPL1I") },
+    { "VIFF", 0, MagickString("\253\001") },
+    { "WMF", 0, MagickString("\327\315\306\232") },
+    { "WMF", 0, MagickString("\001\000\011\000") },
+    { "WPG", 0, MagickString("\377WPC") },
+    { "XBM", 0, MagickString("#define") },
+    { "XCF", 0, MagickString("gimp xcf") },
+    { "XEF", 0, MagickString("FOVb") },
+    { "XPM", 1, MagickString("* XPM *") },
+    { "XWD", 4, MagickString("\007\000\000") },
+    { "XWD", 5, MagickString("\000\000\007") },
+    { (const char *) NULL, 0, MagickString((const char *) NULL) }
  };
 
 static LinkedListInfo
@@ -725,7 +724,15 @@
   if (xml == (char *) NULL)
     return(MagickFalse);
   if (magic_list == (LinkedListInfo *) NULL)
-    magic_list=NewLinkedList(0);
+    {
+      magic_list=NewLinkedList(0);
+      if (magic_list == (LinkedListInfo *) NULL)
+        {
+          ThrowFileException(exception,ResourceLimitError,
+            "MemoryAllocationFailed",filename);
+          return(MagickFalse);
+        }
+    }
   status=MagickTrue;
   magic_info=(MagicInfo *) NULL;
   token=AcquireString(xml);
@@ -808,6 +815,7 @@
           ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
         (void) ResetMagickMemory(magic_info,0,sizeof(*magic_info));
         magic_info->path=ConstantString(filename);
+        magic_info->exempt=MagickFalse;
         magic_info->signature=MagickSignature;
         continue;
       }
@@ -979,7 +987,15 @@
   */
   status=MagickFalse;
   if (magic_list == (LinkedListInfo *) NULL)
-    magic_list=NewLinkedList(0);
+    {
+      magic_list=NewLinkedList(0);
+      if (magic_list == (LinkedListInfo *) NULL)
+        {
+          ThrowFileException(exception,ResourceLimitError,
+            "MemoryAllocationFailed",filename);
+          return(MagickFalse);
+        }
+    }
   for (p=MagicMap; p->name != (const char *) NULL; p++)
   {
     MagicInfo
@@ -987,13 +1003,17 @@
 
     magic_info=(MagicInfo *) AcquireMagickMemory(sizeof(*magic_info));
     if (magic_info == (MagicInfo *) NULL)
-      ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+      {
+        (void) ThrowMagickException(exception,GetMagickModule(),
+          ResourceLimitError,"MemoryAllocationFailed","`%s'",magic_info->name);
+        continue;
+      }
     (void) ResetMagickMemory(magic_info,0,sizeof(*magic_info));
     magic_info->path="[built-in]";
     magic_info->name=(char *) p->name;
     magic_info->offset=p->offset;
     magic_info->target=(char *) p->magic;
-    magic_info->magic=p->magic;
+    magic_info->magic=(unsigned char *) p->magic;
     magic_info->length=p->length;
     magic_info->exempt=MagickTrue;
     magic_info->signature=MagickSignature;