1
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2025-08-06 14:16:32 +02:00

Fix quadratic behavior in DOMLex due to array_shift.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
This commit is contained in:
Edward Z. Yang
2013-09-17 00:48:42 -07:00
parent cf44f399f8
commit 412bae13b5
6 changed files with 188 additions and 128 deletions

View File

@@ -92,11 +92,11 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
protected function tokenizeDOM($node, &$tokens)
{
$level = 0;
$nodes = array($level => array($node));
$nodes = array($level => new HTMLPurifier_Queue(array($node)));
$closingNodes = array();
do {
while (!empty($nodes[$level])) {
$node = array_shift($nodes[$level]); // FIFO
while (!$nodes[$level]->isEmpty()) {
$node = $nodes[$level]->shift(); // FIFO
$collect = $level > 0 ? true : false;
$needEndingTag = $this->createStartNode($node, $tokens, $collect);
if ($needEndingTag) {
@@ -104,9 +104,9 @@ class HTMLPurifier_Lexer_DOMLex extends HTMLPurifier_Lexer
}
if ($node->childNodes && $node->childNodes->length) {
$level++;
$nodes[$level] = array();
$nodes[$level] = new HTMLPurifier_Queue();
foreach ($node->childNodes as $childNode) {
array_push($nodes[$level], $childNode);
$nodes[$level]->push($childNode);
}
}
}