return(IsMagickTrue(i!=0));
}
+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 MagickBooleanType InvokeDelegate(ImageInfo *image_info,
Image *image,const char *decode,const char *encode,ExceptionInfo *exception)
{
command=InterpretImageProperties(image_info,image,commands[i],exception);
if (command != (char *) NULL)
{
+ char
+ *sanitize_command;
+
/*
Execute delegate.
*/
+ sanitize_command=SanitizeDelegateCommand(command);
status=IsMagickTrue(SystemCommand(delegate_info->spawn,
- image_info->verbose,command,exception) != 0);
+ image_info->verbose,sanitize_command,exception) != 0);
+ sanitize_command=DestroyString(sanitize_command);
if (IfMagickTrue(delegate_info->spawn))
{
ssize_t