mirror of
https://github.com/ezyang/htmlpurifier.git
synced 2025-03-23 14:27:02 +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 {
|
} else {
|
||||||
$parent = $definition->info_parent_def;
|
$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
|
// parent element does not allow link elements, don't bother
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -29,8 +29,8 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
|
|||||||
// "google.com"
|
// "google.com"
|
||||||
return;
|
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);
|
$bits = preg_split('#((?:https?|ftp)://[^\s\'"<>()]+)#S', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||||
|
|
||||||
$token = array();
|
$token = array();
|
||||||
|
@ -256,8 +256,9 @@ class HTMLPurifier_Strategy_MakeWellFormed extends HTMLPurifier_Strategy
|
|||||||
$injector =& $context->get('Injector');
|
$injector =& $context->get('Injector');
|
||||||
$current_injector =& $context->get('CurrentInjector');
|
$current_injector =& $context->get('CurrentInjector');
|
||||||
|
|
||||||
if (isset($injector[$current_injector])) {
|
$offset = count($token);
|
||||||
$injector_skip[$current_injector] = count($token);
|
for ($i = 0; $i <= $current_injector; $i++) {
|
||||||
|
$injector_skip[$i] += $offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
} elseif ($token) {
|
} 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.
|
* 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 URL <a href="http://example.com">http://example.com</a> is what you need'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->assertResult(
|
||||||
|
'<a>http://example.com/</a>'
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function testMultipleInjectors() {
|
function testMultipleInjectors() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user