diff options
author | Dmitry Stogov <dmitry@zend.com> | 2017-12-14 23:55:57 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2017-12-14 23:55:57 +0300 |
commit | a7b6812ae6a50e96100bd7194693ed43f330d560 (patch) | |
tree | 2b46b2afe1f190393958f597ef06d724fca9952e /sapi/phpdbg/phpdbg.c | |
parent | 0d484172fe7b35beae14ae777c2bda9cf120b55c (diff) | |
download | php-git-a7b6812ae6a50e96100bd7194693ed43f330d560.tar.gz |
Fixed stream handler override
Diffstat (limited to 'sapi/phpdbg/phpdbg.c')
-rw-r--r-- | sapi/phpdbg/phpdbg.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/sapi/phpdbg/phpdbg.c b/sapi/phpdbg/phpdbg.c index 7c465618be..0bb54a0b69 100644 --- a/sapi/phpdbg/phpdbg.c +++ b/sapi/phpdbg/phpdbg.c @@ -1356,7 +1356,7 @@ php_stream *phpdbg_stream_url_wrap_php(php_stream_wrapper *wrapper, const char * return stream; } - return PHPDBG_G(orig_url_wrap_php)->stream_opener(wrapper, path, mode, options, opened_path, context STREAMS_CC); + return PHPDBG_G(orig_url_wrap_php)->wops->stream_opener(wrapper, path, mode, options, opened_path, context STREAMS_CC); } /* }}} */ int main(int argc, char **argv) /* {{{ */ @@ -1399,6 +1399,7 @@ int main(int argc, char **argv) /* {{{ */ void* (*_malloc)(size_t); void (*_free)(void*); void* (*_realloc)(void*, size_t); + php_stream_wrapper wrapper; php_stream_wrapper_ops wops; @@ -1868,11 +1869,14 @@ phpdbg_main: } { - php_stream_wrapper *wrapper = zend_hash_str_find_ptr(php_stream_get_url_stream_wrappers_hash(), ZEND_STRL("php")); - PHPDBG_G(orig_url_wrap_php) = wrapper->wops; - memcpy(&wops, wrapper->wops, sizeof(wops)); + zval *zv = zend_hash_str_find(php_stream_get_url_stream_wrappers_hash(), ZEND_STRL("php")); + php_stream_wrapper *tmp_wrapper = Z_PTR_P(zv); + PHPDBG_G(orig_url_wrap_php) = tmp_wrapper; + memcpy(&wrapper, tmp_wrapper, sizeof(wrapper)); + memcpy(&wops, tmp_wrapper->wops, sizeof(wops)); wops.stream_opener = phpdbg_stream_url_wrap_php; - wrapper->wops = &wops; + wrapper.wops = (const php_stream_wrapper_ops*)&wops; + Z_PTR_P(zv) = &wrapper; } /* Make stdin, stdout and stderr accessible from PHP scripts */ @@ -2151,8 +2155,8 @@ phpdbg_out: } { - php_stream_wrapper *wrapper = zend_hash_str_find_ptr(php_stream_get_url_stream_wrappers_hash(), ZEND_STRL("php")); - wrapper->wops = PHPDBG_G(orig_url_wrap_php); + zval *zv = zend_hash_str_find(php_stream_get_url_stream_wrappers_hash(), ZEND_STRL("php")); + Z_PTR_P(zv) = (void*)PHPDBG_G(orig_url_wrap_php); } zend_hash_destroy(&PHPDBG_G(file_sources)); |