return((XMLTreeInfo *) NULL);
}
-static MagickBooleanType ValidateEntities(char *tag,char *xml,char **entities)
+static MagickBooleanType ValidateEntities(char *tag,char *xml,char **entities,
+ const size_t depth)
{
register ssize_t
i;
/*
Check for circular entity references.
*/
+ if (depth > MagickMaxRecursionDepth)
+ return(MagickFalse);
for ( ; ; xml++)
{
while ((*xml != '\0') && (*xml != '&'))
(strncmp(entities[i],xml+1,strlen(entities[i])) == 0))
i+=2;
if ((entities[i] != (char *) NULL) &&
- (ValidateEntities(tag,entities[i+1],entities) == 0))
+ (ValidateEntities(tag,entities[i+1],entities,depth) == 0))
return(MagickFalse);
}
}
}
entities[i+1]=ParseEntities(v,predefined_entitites,'%');
entities[i+2]=(char *) NULL;
- if (ValidateEntities(n,entities[i+1],entities) != MagickFalse)
+ if (ValidateEntities(n,entities[i+1],entities,0) != MagickFalse)
entities[i]=n;
else
{