0
0
mirror of https://github.com/ezyang/htmlpurifier.git synced 2024-11-09 15:28:40 +00:00

Allow non-static autoload methods w/ PHP >= 5.2.11

HTML Purifier loads itself as the first autoload function by
unregistering all existing functions and re-registering them after
registering itself.

Originally an exception was thrown when a non-static object method was
encountered as the behaviour of spl_autoload_functions() did not return
the object instance, but only the class name.  This was filed on PHP
bugs (#44144).

The bug was fixed for PHP >= 5.2.11 and >= 5.3

Signed-off-by: Nick Pope <nick@nickpope.me.uk>
Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
This commit is contained in:
Nick Pope 2010-10-13 19:17:38 +01:00 committed by Edward Z. Yang
parent 1d4a38d055
commit 0b9db1f54b
3 changed files with 7 additions and 2 deletions

1
NEWS
View File

@ -11,6 +11,7 @@ NEWS ( CHANGELOG and HISTORY ) HTMLPurifier
4.2.1, unknown release date 4.2.1, unknown release date
! Added %HTML.Nofollow to add rel="nofollow" to external links. ! Added %HTML.Nofollow to add rel="nofollow" to external links.
! More types of SPL autoloaders allowed on later versions of PHP.
- Make removal of conditional IE comments ungreedy; thanks Bernd - Make removal of conditional IE comments ungreedy; thanks Bernd
for reporting. for reporting.
- Escape CDATA before removing Internet Explorer comments. - Escape CDATA before removing Internet Explorer comments.

View File

@ -65,10 +65,11 @@ class HTMLPurifier_Bootstrap
if ( ($funcs = spl_autoload_functions()) === false ) { if ( ($funcs = spl_autoload_functions()) === false ) {
spl_autoload_register($autoload); spl_autoload_register($autoload);
} elseif (function_exists('spl_autoload_unregister')) { } elseif (function_exists('spl_autoload_unregister')) {
$buggy = version_compare(PHP_VERSION, '5.2.11', '<');
$compat = version_compare(PHP_VERSION, '5.1.2', '<=') && $compat = version_compare(PHP_VERSION, '5.1.2', '<=') &&
version_compare(PHP_VERSION, '5.1.0', '>='); version_compare(PHP_VERSION, '5.1.0', '>=');
foreach ($funcs as $func) { foreach ($funcs as $func) {
if (is_array($func)) { if ($buggy && is_array($func)) {
// :TRICKY: There are some compatibility issues and some // :TRICKY: There are some compatibility issues and some
// places where we need to error out // places where we need to error out
$reflector = new ReflectionMethod($func[0], $func[1]); $reflector = new ReflectionMethod($func[0], $func[1]);

View File

@ -5,6 +5,9 @@ Error when registering autoload with non-static autoload already on SPL stack
if (!function_exists('spl_autoload_register')) { if (!function_exists('spl_autoload_register')) {
echo "skip - spl_autoload_register() not available"; echo "skip - spl_autoload_register() not available";
} }
if (version_compare(PHP_VERSION, '5.2.11', '>=')) {
echo "skip - non-buggy version of PHP";
}
--FILE-- --FILE--
<?php <?php
class NotStatic class NotStatic