From: cristy Date: Thu, 1 May 2014 00:48:26 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~2375 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=708e3c690939d1c675af263860990d054aa014b2;p=imagemagick --- diff --git a/MagickCore/token.c b/MagickCore/token.c index ed22740d9..633f9fea4 100644 --- a/MagickCore/token.c +++ b/MagickCore/token.c @@ -180,95 +180,92 @@ MagickExport void GetMagickToken(const char *start,const char **end,char *token) assert(start != (const char *) NULL); assert(token != (char *) NULL); i=0; - for (p=start; *p != '\0'; ) + p=start; + while ((isspace((int) ((unsigned char) *p)) != 0) && (*p != '\0')) + p++; + if (*p == '\0') + break; + switch (*p) { - while ((isspace((int) ((unsigned char) *p)) != 0) && (*p != '\0')) - p++; - if (*p == '\0') - break; - switch (*p) + case '"': + case '\'': + case '`': + case '{': { - case '"': - case '\'': - case '`': - case '{': + register char + escape; + + switch (*p) + { + case '"': escape='"'; break; + case '\'': escape='\''; break; + case '`': escape='\''; break; + case '{': escape='}'; break; + default: escape=(*p); break; + } + for (p++; *p != '\0'; p++) { - register char - escape; + if ((*p == '\\') && ((*(p+1) == escape) || (*(p+1) == '\\'))) + p++; + else + if (*p == escape) + { + p++; + break; + } + token[i++]=(*p); + } + break; + } + case '/': + { + token[i++]=(*p++); + if ((*p == '>') || (*p == '/')) + token[i++]=(*p++); + break; + } + default: + { + char + *q; - switch (*p) + value=StringToDouble(p,&q); + (void) value; + if ((p != q) && (*p != ',')) { - case '"': escape='"'; break; - case '\'': escape='\''; break; - case '`': escape='\''; break; - case '{': escape='}'; break; - default: escape=(*p); break; + for ( ; (p < q) && (*p != ','); p++) + token[i++]=(*p); + if (*p == '%') + token[i++]=(*p++); + break; } - for (p++; *p != '\0'; p++) + if ((*p != '\0') && (isalpha((int) ((unsigned char) *p)) == 0) && + (*p != *DirectorySeparator) && (*p != '#') && (*p != '<')) { - if ((*p == '\\') && ((*(p+1) == escape) || (*(p+1) == '\\'))) - p++; - else - if (*p == escape) - { - p++; - break; - } - token[i++]=(*p); - } - break; - } - case '/': - { - token[i++]=(*p++); - if ((*p == '>') || (*p == '/')) token[i++]=(*p++); - break; - } - default: + break; + } + for ( ; *p != '\0'; p++) { - char - *q; - - value=StringToDouble(p,&q); - (void) value; - if ((p != q) && (*p != ',')) - { - for ( ; (p < q) && (*p != ','); p++) - token[i++]=(*p); - if (*p == '%') - token[i++]=(*p++); - break; - } - if ((*p != '\0') && (isalpha((int) ((unsigned char) *p)) == 0) && - (*p != *DirectorySeparator) && (*p != '#') && (*p != '<')) + if (((isspace((int) ((unsigned char) *p)) != 0) || (*p == '=') || + (*p == ':') || (*p == ',') || (*p == '|') || (*p == ';')) && + (*(p-1) != '\\')) + break; + if ((i > 0) && (*p == '<')) + break; + token[i++]=(*p); + if (*p == '>') + break; + if (*p == '(') + for (p++; *p != '\0'; p++) { - token[i++]=(*p++); - break; + token[i++]=(*p); + if ((*p == ')') && (*(p-1) != '\\')) + break; } - for ( ; *p != '\0'; p++) - { - if (((isspace((int) ((unsigned char) *p)) != 0) || (*p == '=') || - (*p == ':') || (*p == ',') || (*p == '|') || (*p == ';')) && - (*(p-1) != '\\')) - break; - if ((i > 0) && (*p == '<')) - break; - token[i++]=(*p); - if (*p == '>') - break; - if (*p == '(') - for (p++; *p != '\0'; p++) - { - token[i++]=(*p); - if ((*p == ')') && (*(p-1) != '\\')) - break; - } - } - break; } + break; } - break; } token[i]='\0'; if (LocaleNCompare(token,"url(",4) == 0)