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:
parent
62c6d93b6d
commit
269268b843
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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.
|
||||
*/
|
||||
|
@ -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() {
|
||||
|
Loading…
Reference in New Issue
Block a user