Commit: fae0a738df8542d909c4e56b4af89abcfbc2f99e Author: Dmitry Stogov <dmi...@zend.com> Tue, 5 Mar 2013 14:57:50 +0400 Parents: 32904c6043dd2b9d7fbe3b1bcfb43c0be835daa9 Branches: PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=fae0a738df8542d909c4e56b4af89abcfbc2f99e Log: Fixed bug #64353 (Built-in classes can be unavailable with dynamic includes and Optimizer+) Bugs: https://bugs.php.net/64353 Changed paths: M ZendAccelerator.c A tests/bug64353.phpt Diff: diff --git a/ZendAccelerator.c b/ZendAccelerator.c index e0576b8..aa22670 100644 --- a/ZendAccelerator.c +++ b/ZendAccelerator.c @@ -1207,6 +1207,20 @@ static zend_persistent_script *compile_and_cache_file(zend_file_handle *file_han return NULL; } +#if ZEND_EXTENSION_API_NO >= PHP_5_3_X_API_NO + if (file_handle->type == ZEND_HANDLE_STREAM) { + char *buf; + size_t size, offset = 0; + + /* Stream callbacks needs to be called in context of original + * function and class tables (see: https://bugs.php.net/bug.php?id=64353) + */ + if (zend_stream_fixup(file_handle, &buf, &size TSRMLS_CC) == FAILURE) { + return NULL; + } + } +#endif + new_persistent_script = create_persistent_script(); /* Save the original values for the op_array, function table and class table */ diff --git a/tests/bug64353.phpt b/tests/bug64353.phpt new file mode 100644 index 0000000..32e70cc --- /dev/null +++ b/tests/bug64353.phpt @@ -0,0 +1,29 @@ +--TEST-- +Bug #64353 (Built-in classes can be unavailable with dynamic includes and Optimizer+) +--INI-- +zend_optimizerplus.enable=1 +zend_optimizerplus.enable_cli=1 +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +class BugLoader extends php_user_filter { + public function filter($in, $out, &$consumed, $closing) { + if (!class_exists("Test")) { + eval("class Test extends ArrayObject {}"); + } + while ($bucket = stream_bucket_make_writeable($in)) { + $bucket->data = strtoupper($bucket->data); + $consumed += $bucket->datalen; +// stream_bucket_append($out, $bucket); + } + return PSFS_PASS_ON; + } +} + +stream_filter_register('bug.test', 'BugLoader'); +include "php://filter/read=bug.test/resource=test.php"; +echo "OK\n"; +?> +--EXPECT-- +OK -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php