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 */
--- /dev/null
+--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