]> granicus.if.org Git - php/commitdiff
Fix include_once in phpdbg
authorBob Weinand <bobwei9@hotmail.com>
Sat, 7 May 2016 12:45:29 +0000 (14:45 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Sat, 7 May 2016 12:45:41 +0000 (14:45 +0200)
sapi/phpdbg/phpdbg_list.c

index e31fe199f2e9909f3b3f93289d70787ed190ef06..ca73209114b5ff07561fc34fba3c2a3a55bdb0c3 100644 (file)
@@ -233,6 +233,7 @@ void phpdbg_list_function_byname(const char *str, size_t len) /* {{{ */
        efree(func_name);
 } /* }}} */
 
+/* Note: do not free the original file handler, let original compile_file() or caller do that. Caller may rely on its value to check success */
 zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type) {
        phpdbg_file_source data, *dataptr;
        zend_file_handle fake;
@@ -243,8 +244,7 @@ zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type) {
        char resolved_path_buf[MAXPATHLEN];
 
        if (zend_stream_fixup(file, &bufptr, &data.len) == FAILURE) {
-               zend_file_handle_dtor(file);
-               return NULL;
+               return PHPDBG_G(compile_file)(file, type);
        }
 
        data.buf = emalloc(data.len + ZEND_MMAP_AHEAD + 1);
@@ -281,6 +281,10 @@ zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type) {
        if (ret == NULL) {
                efree(data.buf);
                efree(dataptr);
+
+               fake.opened_path = NULL;
+               zend_file_handle_dtor(&fake);
+
                return NULL;
        }
 
@@ -290,8 +294,6 @@ zend_op_array *phpdbg_compile_file(zend_file_handle *file, int type) {
 
        fake.opened_path = NULL;
        zend_file_handle_dtor(&fake);
-       zend_file_handle_dtor(file);
-       file->type = -1;
 
        return ret;
 }