0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2025-01-03 05:11:52 +00:00

Fix possible infinite loop by incrementing everybody's offsets. Add printTokens debugger function. Refine Linkify parent node checks (also check excludes, although technically later steps will catch it!)

git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1218 48356398-32a2-884e-a903-53898d9a118a
This commit is contained in:
Edward Z. Yang 2007-06-24 03:34:33 +00:00
parent 62c6d93b6d
commit 269268b843
4 changed files with 22 additions and 4 deletions

View File

@ -19,7 +19,7 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
} else {
$parent = $definition->info_parent_def;
}
if (!isset($parent->child->elements['a'])) {
if (!isset($parent->child->elements['a']) || isset($parent->excludes['a'])) {
// parent element does not allow link elements, don't bother
return;
}
@ -29,8 +29,8 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
// "google.com"
return;
}
// there is/are URL(s). Let's split the string:
// there is/are URL(s). Let's split the string:
$bits = preg_split('#((?:https?|ftp)://[^\s\'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
$token = array();

View File

@ -256,8 +256,9 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
$injector =& $context->get('Injector');
$current_injector =& $context->get('CurrentInjector');
if (isset($injector[$current_injector])) {
$injector_skip[$current_injector] = count($token);
$offset = count($token);
for ($i = 0; $i <= $current_injector; $i++) {
$injector_skip[$i] += $offset;
}
} elseif ($token) {

View File

@ -54,6 +54,19 @@ function isInScopes($array = array()) {
}
/**#@-*/
function printTokens($tokens, $index) {
$string = '<pre>';
$generator = new HTMLPurifier_Generator();
foreach ($tokens as $i => $token) {
if ($index == $i) $string .= '[<strong>';
$string .= "<sup>$i</sup>";
$string .= $generator->escape($generator->generateFromToken($token));
if ($index == $i) $string .= '</strong>]';
}
$string .= '</pre>';
echo $string;
}
/**
* The debugging singleton. Most interesting stuff happens here.
*/

View File

@ -196,6 +196,10 @@ Par
'This URL <a href="http://example.com">http://example.com</a> is what you need'
);
$this->assertResult(
'<a>http://example.com/</a>'
);
}
function testMultipleInjectors() {