]> granicus.if.org Git - imagemagick/commitdiff
...
authorCristy <urban-warrior@imagemagick.org>
Sun, 10 Jul 2016 00:54:46 +0000 (20:54 -0400)
committerCristy <urban-warrior@imagemagick.org>
Sun, 10 Jul 2016 00:54:46 +0000 (20:54 -0400)
MagickCore/annotate.c
MagickCore/string.c
coders/pdf.c

index 583dd90ec73aae1697d6823ad7bd0e901a92ab54..297304f60307004bf799a7a068c37291bdb154bf 100644 (file)
@@ -1780,34 +1780,48 @@ static MagickBooleanType RenderFreetype(Image *image,const DrawInfo *draw_info,
 %
 */
 
-static char *EscapeParenthesis(const char *text)
+static char *EscapeParenthesis(const char *source)
 {
   char
-    *buffer;
+    *destination;
 
   register char
-    *p;
+    *q;
 
-  register ssize_t
-    i;
+  register const char
+    *p;
 
   size_t
-    escapes;
+    length;
 
-  escapes=0;
-  buffer=AcquireString(text);
-  p=buffer;
-  for (i=0; i < (ssize_t) MagickMin(strlen(text),MagickPathExtent-escapes-1); i++)
+  assert(source != (const char *) NULL);
+  length=0;
+  for (p=source; *p != '\0'; p++)
   {
-    if ((text[i] == '(') || (text[i] == ')'))
+    if ((*p == '\\') || (*p == '(') || (*p == ')'))
       {
-        *p++='\\';
-        escapes++;
+        if (~length < 1)
+          ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString");
+        length++;
       }
-    *p++=text[i];
+    length++;
+  }
+  destination=(char *) NULL;
+  if (~length >= (MagickPathExtent-1))
+    destination=(char *) AcquireQuantumMemory(length+MagickPathExtent,
+      sizeof(*destination));
+  if (destination == (char *) NULL)
+    ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString");
+  *destination='\0';
+  q=destination;
+  for (p=source; *p != '\0'; p++)
+  {
+    if ((*p == '\\') || (*p == '(') || (*p == ')'))
+      *q++='\\';
+    *q++=(*p);
   }
-  *p='\0';
-  return(buffer);
+  *q='\0';
+  return(destination);
 }
 
 static MagickBooleanType RenderPostscript(Image *image,
index d0dccac4c47d3a779dc7fc43598f4242cc3d02a7..2f4998884f050a21a795f3017d3643970cff9816 100644 (file)
@@ -929,14 +929,17 @@ MagickExport char *EscapeString(const char *source,const char escape)
     length;
 
   assert(source != (const char *) NULL);
-  length=strlen(source);
+  length=0;
   for (p=source; *p != '\0'; p++)
+  {
     if ((*p == '\\') || (*p == escape))
       {
         if (~length < 1)
           ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString");
         length++;
       }
+    length++;
+  }
   destination=(char *) NULL;
   if (~length >= (MagickPathExtent-1))
     destination=(char *) AcquireQuantumMemory(length+MagickPathExtent,
index b72ba02646a6809e7856f516605ce361f7c5fba2..62c5d3032aee3a69c1a39b91c8ad28acfa42e9cb 100644 (file)
@@ -623,7 +623,7 @@ static Image *ReadPDFImage(const ImageInfo *image_info,ExceptionInfo *exception)
       continue;
     hires_bounds=bounds;
   }
-  if ((fabs(hires_bounds.x2-hires_bounds.x1) >= MagickEpsilon) && 
+  if ((fabs(hires_bounds.x2-hires_bounds.x1) >= MagickEpsilon) &&
       (fabs(hires_bounds.y2-hires_bounds.y1) >= MagickEpsilon))
     {
       /*
@@ -953,33 +953,48 @@ ModuleExport void UnregisterPDFImage(void)
 %
 */
 
-static char *EscapeParenthesis(const char *text)
+static char *EscapeParenthesis(const char *source)
 {
+  char
+    *destination;
+
   register char
-    *p;
+    *q;
 
-  register ssize_t
-    i;
+  register const char
+    *p;
 
   size_t
-    escapes;
-
-  static char
-    buffer[MagickPathExtent];
+    length;
 
-  escapes=0;
-  p=buffer;
-  for (i=0; i < (ssize_t) MagickMin(strlen(text),(MagickPathExtent-escapes-1)); i++)
+  assert(source != (const char *) NULL);
+  length=0;
+  for (p=source; *p != '\0'; p++)
   {
-    if ((text[i] == '(') || (text[i] == ')'))
+    if ((*p == '\\') || (*p == '(') || (*p == ')'))
       {
-        *p++='\\';
-        escapes++;
+        if (~length < 1)
+          ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString");
+        length++;
       }
-    *p++=text[i];
+    length++;
+  }
+  destination=(char *) NULL;
+  if (~length >= (MagickPathExtent-1))
+    destination=(char *) AcquireQuantumMemory(length+MagickPathExtent,
+      sizeof(*destination));
+  if (destination == (char *) NULL)
+    ThrowFatalException(ResourceLimitFatalError,"UnableToEscapeString");
+  *destination='\0';
+  q=destination;
+  for (p=source; *p != '\0'; p++)
+  {
+    if ((*p == '\\') || (*p == '(') || (*p == ')'))
+      *q++='\\';
+    *q++=(*p);
   }
-  *p='\0';
-  return(buffer);
+  *q='\0';
+  return(destination);
 }
 
 static size_t UTF8ToUTF16(const unsigned char *utf8,wchar_t *utf16)