diff --git a/UPGRADING b/UPGRADING index 3fd2caa0f6750..900c0694ec31e 100644 --- a/UPGRADING +++ b/UPGRADING @@ -661,6 +661,10 @@ The following extensions and SAPIs are affected: 14. Other Changes ======================================== +- Core: + . Add zend.exception_ignore_args to force the omission of arguments from + stack traces collected for exceptions. + ======================================== 15. Performance Improvements ======================================== diff --git a/Zend/tests/exception_ignore_args.phpt b/Zend/tests/exception_ignore_args.phpt new file mode 100644 index 0000000000000..6dcb872254b25 --- /dev/null +++ b/Zend/tests/exception_ignore_args.phpt @@ -0,0 +1,18 @@ +--TEST-- +Exceptions ignoring arguments +--FILE-- + +--EXPECTF-- +Fatal error: Uncaught Exception in %sexception_ignore_args.php:3 +Stack trace: +#0 %sexception_ignore_args.php(8): {closure}() +#1 {main} + thrown in %sexception_ignore_args.php on line 3 diff --git a/Zend/zend.c b/Zend/zend.c index 080a75a3c419b..c3a99d2df8784 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -174,6 +174,7 @@ ZEND_INI_BEGIN() #ifdef ZEND_SIGNALS STD_ZEND_INI_BOOLEAN("zend.signal_check", "0", ZEND_INI_SYSTEM, OnUpdateBool, check, zend_signal_globals_t, zend_signal_globals) #endif + STD_ZEND_INI_BOOLEAN("zend.exception_ignore_args", "0", ZEND_INI_ALL, OnUpdateBool, exception_ignore_args, zend_executor_globals, executor_globals) ZEND_INI_END() ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap) /* {{{ */ diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c index e53ea1f1c7632..ecd946a06ec05 100644 --- a/Zend/zend_exceptions.c +++ b/Zend/zend_exceptions.c @@ -212,7 +212,9 @@ static zend_object *zend_default_exception_new_ex(zend_class_entry *class_type, object_properties_init(object, class_type); if (EG(current_execute_data)) { - zend_fetch_debug_backtrace(&trace, skip_top_traces, 0, 0); + zend_fetch_debug_backtrace(&trace, + skip_top_traces, + EG(exception_ignore_args) ? DEBUG_BACKTRACE_IGNORE_ARGS : 0, 0); } else { array_init(&trace); } diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h index a64e4beac2a70..1d427fe478842 100644 --- a/Zend/zend_globals.h +++ b/Zend/zend_globals.h @@ -236,6 +236,8 @@ struct _zend_executor_globals { HashTable weakrefs; + zend_bool exception_ignore_args; + void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; diff --git a/php.ini-development b/php.ini-development index c78921980ea23..eb30bd389eb8c 100644 --- a/php.ini-development +++ b/php.ini-development @@ -354,6 +354,10 @@ zend.enable_gc = On ; Default: "" ;zend.script_encoding = +; Allows to include or exclude arguments from stack traces generated for exceptions +; Default: Off +zend.exception_ignore_args = Off + ;;;;;;;;;;;;;;;;; ; Miscellaneous ; ;;;;;;;;;;;;;;;;; @@ -1579,6 +1583,8 @@ zend.assertions = 1 ; http://php.net/assert.quiet-eval ;assert.quiet_eval = 0 + + [COM] ; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs ; http://php.net/com.typelib-file diff --git a/php.ini-production b/php.ini-production index e3f061e3fbae6..229846698d3c8 100644 --- a/php.ini-production +++ b/php.ini-production @@ -359,6 +359,12 @@ zend.enable_gc = On ; Default: "" ;zend.script_encoding = +; Allows to include or exclude arguments from stack traces generated for exceptions +; Default: Off +; In production, it is recommended to turn this setting on to prohibit the output +; of sensitive information in stack traces +zend.exception_ignore_args = On + ;;;;;;;;;;;;;;;;; ; Miscellaneous ; ;;;;;;;;;;;;;;;;;