Browse Source

Fixed bug #64353 (Built-in classes can be unavailable with dynamic includes and Optimizer+)

pull/288/merge
Dmitry Stogov 13 years ago
parent
commit
fae0a738df
  1. 14
      ZendAccelerator.c
  2. 29
      tests/bug64353.phpt

14
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 */

29
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
Loading…
Cancel
Save