diff options
Diffstat (limited to 'ext')
| -rwxr-xr-x | ext/spl/php_spl.c | 1 | ||||
| -rw-r--r-- | ext/spl/tests/bug48493.phpt | 26 |
2 files changed, 27 insertions, 0 deletions
diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 2ffb4d89bb..a9f954aa6e 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -409,6 +409,7 @@ PHP_FUNCTION(spl_autoload_call) (ht)->pListTail->pListNext = (ht)->pListHead; \ (ht)->pListHead = (ht)->pListTail; \ (ht)->pListTail = (ht)->pListHead->pListLast; \ + (ht)->pListHead->pListNext->pListLast = (ht)->pListHead;\ (ht)->pListTail->pListNext = NULL; \ (ht)->pListHead->pListLast = NULL; diff --git a/ext/spl/tests/bug48493.phpt b/ext/spl/tests/bug48493.phpt new file mode 100644 index 0000000000..eee925902c --- /dev/null +++ b/ext/spl/tests/bug48493.phpt @@ -0,0 +1,26 @@ +--TEST-- +SPL: Bug #48493 spl_autoload_unregister() can't handle prepended functions +--FILE-- +<?php +function autoload1() {} + +function autoload2() {} + +spl_autoload_register('autoload2'); +spl_autoload_register('autoload1', true, true); +var_dump(spl_autoload_functions()); + +spl_autoload_unregister('autoload2'); +var_dump(spl_autoload_functions()); +?> +--EXPECT-- +array(2) { + [0]=> + unicode(9) "autoload1" + [1]=> + unicode(9) "autoload2" +} +array(1) { + [0]=> + unicode(9) "autoload1" +} |
