]> granicus.if.org Git - imagemagick/commitdiff
(no commit message)
authorcristy <urban-warrior@git.imagemagick.org>
Wed, 28 May 2014 12:22:17 +0000 (12:22 +0000)
committercristy <urban-warrior@git.imagemagick.org>
Wed, 28 May 2014 12:22:17 +0000 (12:22 +0000)
MagickCore/string.c

index 1c9eb8526780bb7e0d508fa6ac25b44ae1b15733..c5479f1e29ffae44ae90f5a84c2d3b3564b1d006 100644 (file)
@@ -213,13 +213,15 @@ MagickExport StringInfo *BlobToStringInfo(const void *blob,const size_t length)
     *string_info;
 
   string_info=AcquireStringInfo(0);
-  if (string_info->datum != (unsigned char *) NULL)
-    string_info->datum=(unsigned char *) RelinquishMagickMemory(
-      string_info->datum);
+  if (~length < MaxTextExtent)
+    ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
   string_info->length=length;
-  if (~string_info->length >= (MaxTextExtent-1))
-    string_info->datum=(unsigned char *) AcquireQuantumMemory(
-      string_info->length+MaxTextExtent,sizeof(*string_info->datum));
+  if (string_info->datum == (unsigned char *) NULL)
+    string_info->datum=(unsigned char *) AcquireQuantumMemory(length+
+      MaxTextExtent,sizeof(*string_info->datum));
+  else
+    string_info->datum=(unsigned char *) ResizeQuantumMemory(string_info->datum,
+      length+MaxTextExtent,sizeof(*string_info->datum));
   if (string_info->datum == (unsigned char *) NULL)
     {
       string_info=DestroyStringInfo(string_info);
@@ -650,11 +652,11 @@ MagickExport StringInfo *ConfigureFileToStringInfo(const char *filename)
   string[length]='\0';
   file=close(file)-1;
   string_info=AcquireStringInfo(0);
+  (void) CopyMagickString(string_info->path,filename,MaxTextExtent);
+  string_info->length=length;
   if (string_info->datum != (unsigned char *) NULL)
     string_info->datum=(unsigned char *) RelinquishMagickMemory(
       string_info->datum);
-  (void) CopyMagickString(string_info->path,filename,MaxTextExtent);
-  string_info->length=length;
   string_info->datum=(unsigned char *) string;
   return(string_info);
 }
@@ -1032,10 +1034,10 @@ MagickExport StringInfo *FileToStringInfo(const char *filename,
   (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",filename);
   assert(exception != (ExceptionInfo *) NULL);
   string_info=AcquireStringInfo(0);
+  (void) CopyMagickString(string_info->path,filename,MaxTextExtent);
   if (string_info->datum != (unsigned char *) NULL)
     string_info->datum=(unsigned char *) RelinquishMagickMemory(
       string_info->datum);
-  (void) CopyMagickString(string_info->path,filename,MaxTextExtent);
   string_info->datum=FileToBlob(filename,extent,&string_info->length,exception);
   if (string_info->datum == (unsigned char *) NULL)
     {