]> granicus.if.org Git - imagemagick/commitdiff
Add support for SanitizeString() method
authorCristy <urban-warrior@imagemagick.org>
Sun, 29 May 2016 23:54:23 +0000 (19:54 -0400)
committerCristy <urban-warrior@imagemagick.org>
Sun, 29 May 2016 23:54:23 +0000 (19:54 -0400)
MagickCore/blob.c
MagickCore/delegate.c
MagickCore/property.c
MagickCore/string.c
MagickCore/string_.h

index 9871da0bb5d12db42ab30a2fbbb73d3b7c1c0723..82db4f65df48124b6a48091f46fc144fe91e02ea 100644 (file)
@@ -2484,7 +2484,8 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
   if (*filename == '|')
     {
       char
-        fileMode[MagickPathExtent];
+        fileMode[MagickPathExtent],
+        *sanitize_command;
 
       /*
         Pipe image to or from a system command.
@@ -2495,7 +2496,10 @@ MagickExport MagickBooleanType OpenBlob(const ImageInfo *image_info,
 #endif
       *fileMode =(*type);
       fileMode[1]='\0';
-      image->blob->file_info.file=(FILE *) popen_utf8(filename+1, fileMode);
+      sanitize_command=SanitizeString(filename+1);
+      image->blob->file_info.file=(FILE *) popen_utf8(sanitize_command,
+        fileMode);
+      sanitize_command=DestroyString(sanitize_command);
       if (image->blob->file_info.file == (FILE *) NULL)
         {
           ThrowFileException(exception,BlobError,"UnableToOpenBlob",filename);
index 40ecb497572270f32c905c69ad7ec6194c0edfe2..7fd5b4f8ea337a0cc74aaf6339bc4cab2d806db0 100644 (file)
@@ -324,31 +324,6 @@ MagickPrivate void DelegateComponentTerminus(void)
 %    o exception: return any errors here.
 %
 */
-
-static char *SanitizeDelegateCommand(const char *command)
-{
-  char
-    *sanitize_command;
-
-  const char
-    *q;
-
-  register char
-    *p;
-
-  static char
-    whitelist[] =
-      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_- "
-      ".@&;<>()|/\\\'\":%=~`";
-
-  sanitize_command=AcquireString(command);
-  p=sanitize_command;
-  q=sanitize_command+strlen(sanitize_command);
-  for (p+=strspn(p,whitelist); p != q; p+=strspn(p,whitelist))
-    *p='_';
-  return(sanitize_command);
-}
-
 MagickExport int ExternalDelegateCommand(const MagickBooleanType asynchronous,
   const MagickBooleanType verbose,const char *command,char *message,
   ExceptionInfo *exception)
@@ -398,7 +373,7 @@ MagickExport int ExternalDelegateCommand(const MagickBooleanType asynchronous,
       (void) FormatLocaleFile(stderr,"%s\n",command);
       (void) fflush(stderr);
     }
-  sanitize_command=SanitizeDelegateCommand(command);
+  sanitize_command=SanitizeString(command);
   if (asynchronous != MagickFalse)
     (void) ConcatenateMagickString(sanitize_command,"&",MagickPathExtent);
   if (message != (char *) NULL)
@@ -553,21 +528,11 @@ static char *GetMagickPropertyLetter(ImageInfo *image_info,Image *image,
     }
 
   char
-    *property,
     value[MagickPathExtent];
 
   const char
     *string;
 
-  register char
-    *p,
-    *q;
-
-  static char
-    whitelist[] =
-      "^-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
-      "+&@#/%?=~_|!:,.;()";
-
   if ((image != (Image *) NULL) && (image->debug != MagickFalse))
     (void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
   else
@@ -874,15 +839,7 @@ static char *GetMagickPropertyLetter(ImageInfo *image_info,Image *image,
       break;
     }
   }
-  /*
-    Sanitize string.
-  */
-  property=ConstantString(string);
-  p=property;
-  q=property+strlen(property);
-  for (p+=strspn(p,whitelist); p != q; p+=strspn(p,whitelist))
-    *p='_';
-  return(property);
+  return(SanitizeString(string));
 }
 
 static char *InterpretDelegateProperties(ImageInfo *image_info,
index 8bcd1898f6612a8a77deb5234466859f319a9c60..b84c342ebba39adb17ce463574691cd79bbe6a2c 100644 (file)
@@ -2569,30 +2569,6 @@ static const char *GetMagickPropertyLetter(ImageInfo *image_info,
         (ssize_t) image->dispose);
       break;
     }
-    case 'F':
-    {
-      const char
-        *q;
-
-      register char
-        *p;
-
-      static char
-        whitelist[] =
-          "^-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
-          "+&@#/%?=~_|!:,.;()";
-
-      /*
-        Magick filename (sanitized) - filename given incl. coder & read mods.
-      */
-      WarnNoImageReturn("\"%%%c\"",letter);
-      (void) CopyMagickString(value,image->magick_filename,MagickPathExtent);
-      p=value;
-      q=value+strlen(value);
-      for (p+=strspn(p,whitelist); p != q; p+=strspn(p,whitelist))
-        *p='_';
-      break;
-    }
     case 'G': /* Image size as geometry = "%wx%h" */
     {
       WarnNoImageReturn("\"%%%c\"",letter);
index efa79a2b0f6b5d9b3985c3479b750357ad75a7c5..d0dccac4c47d3a779dc7fc43598f4242cc3d02a7 100644 (file)
@@ -1631,6 +1631,55 @@ MagickExport void ResetStringInfo(StringInfo *string_info)
 %                                                                             %
 %                                                                             %
 %                                                                             %
+%   S a n t i z e S t r i n g                                                 %
+%                                                                             %
+%                                                                             %
+%                                                                             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%  SanitizeString() returns an new string removes all characters except
+%  letters, digits and !#$%&'*+-=?^_`{|}~@.[].
+%
+%  The returned string shoud be freed using DestoryString().
+%
+%  The format of the SanitizeString method is:
+%
+%      char *SanitizeString(const char *source)
+%
+%  A description of each parameter follows:
+%
+%    o source: A character string.
+%
+*/
+MagickExport char *SanitizeString(const char *source)
+{
+  char
+    *sanitize_source;
+
+  const char
+    *q;
+  
+  register char
+    *p;
+  
+  static char
+    whitelist[] =
+      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 "
+      "$-_.+!*'(),{}|\\^~[]`\"><#%;/?:@&=";
+  
+  sanitize_source=AcquireString(source);
+  p=sanitize_source;
+  q=sanitize_source+strlen(sanitize_source);
+  for (p+=strspn(p,whitelist); p != q; p+=strspn(p,whitelist))
+    *p='_';
+  return(sanitize_source);
+}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                             %
+%                                                                             %
+%                                                                             %
 %   S e t S t r i n g I n f o                                                 %
 %                                                                             %
 %                                                                             %
index 9d0875cb73c58b25091c8f8239c81891e175a4d8..237ea855d1a322312c02c61da2c97d953e65ae70 100644 (file)
@@ -46,6 +46,7 @@ extern MagickExport char
   *EscapeString(const char *,const char),
   *FileToString(const char *,const size_t,ExceptionInfo *),
   *GetEnvironmentValue(const char *),
+  *SanitizeString(const char *),
   *StringInfoToHexString(const StringInfo *),
   *StringInfoToString(const StringInfo *),
   **StringToArgv(const char *,int *),