From 8c100e6451687e9ecb4101b3d645cdc9b4b6bd53 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov <dmitry@php.net> Date: Tue, 15 Nov 2005 11:13:43 +0000 Subject: [PATCH] Fixed bug #35176 (include()/require()/*_once() produce wrong error messages about main()) --- NEWS | 2 ++ main/main.c | 27 +++++++++++++++++++++++++++ tests/lang/bug35176.phpt | 14 ++++++++++++++ 3 files changed, 43 insertions(+) create mode 100755 tests/lang/bug35176.phpt diff --git a/NEWS b/NEWS index 2beef5505d..bb6e67f35b 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,8 @@ PHP NEWS - Fixed initializing and argument checking for posix_mknod(). (Derick) - Fixed bug #35197 (Destructor is not called). (Tony) - Fixed bug #35179 (tokenizer extension needs T_HALT_COMPILER). (Greg) +- Fixed bug #35176 (include()/require()/*_once() produce wrong error messages + about main()). (Dmitry) - Fixed bug #35142 (SOAP Client/Server Complex Object Support). (Dmitry) - Fixed bug #35135 (PDOStatment without related PDO object may crash). (Ilia) - Fixed bug #35091 (SoapClient leaks memory). (Dmitry) diff --git a/main/main.c b/main/main.c index 014e4f205e..52e80ea305 100644 --- a/main/main.c +++ b/main/main.c @@ -452,6 +452,33 @@ PHPAPI void php_verror(const char *docref, const char *params, int type, const c function = "PHP Startup"; } else if (php_during_module_shutdown()) { function = "PHP Shutdown"; + } else if (EG(current_execute_data) && + EG(current_execute_data)->opline && + EG(current_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL) { + switch (EG(current_execute_data)->opline->op2.u.constant.value.lval) { + case ZEND_EVAL: + function = "eval"; + is_function = 1; + break; + case ZEND_INCLUDE: + function = "include"; + is_function = 1; + break; + case ZEND_INCLUDE_ONCE: + function = "include_once"; + is_function = 1; + break; + case ZEND_REQUIRE: + function = "require"; + is_function = 1; + break; + case ZEND_REQUIRE_ONCE: + function = "require_once"; + is_function = 1; + break; + default: + function = "Unknown"; + } } else { function = get_active_function_name(TSRMLS_C); if (!function || !strlen(function)) { diff --git a/tests/lang/bug35176.phpt b/tests/lang/bug35176.phpt new file mode 100755 index 0000000000..dd56c76a68 --- /dev/null +++ b/tests/lang/bug35176.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #35176 (include()/require()/*_once() produce wrong error messages about main()) +--INI-- +html_errors=1 +error_reporting=4095 +--FILE-- +<?php +require_once('nonexisiting.php'); +?> +--EXPECTF-- +<br /> +<b>Warning</b>: require_once(nonexisiting.php) [<a href='function.require-once.html'>function.require-once.html</a>]: failed to open stream: No such file or directory in <b>%sbug35176.php</b> on line <b>2</b><br /> +<br /> +<b>Fatal error</b>: require_once() [<a href='function.require.html'>function.require.html</a>]: Failed opening required 'nonexisiting.php' (%s) in <b>%sbug35176.php</b> on line <b>2</b><br /> -- 2.40.0