Skip to content

Commit

Permalink
simple ignore arguments in exceptions implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
krakjoe committed Jul 2, 2019
1 parent b546ae9 commit 0819e6d
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 1 deletion.
4 changes: 4 additions & 0 deletions UPGRADING
Expand Up @@ -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
========================================
Expand Down
18 changes: 18 additions & 0 deletions Zend/tests/exception_ignore_args.phpt
@@ -0,0 +1,18 @@
--TEST--
Exceptions ignoring arguments
--FILE--
<?php
$function = function(string $user, string $pass) {
throw new Exception();
};

ini_set("zend.exception_ignore_args", 1);

$function("secrets", "arewrong");
?>
--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
1 change: 1 addition & 0 deletions Zend/zend.c
Expand Up @@ -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) /* {{{ */
Expand Down
4 changes: 3 additions & 1 deletion Zend/zend_exceptions.c
Expand Up @@ -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);
}
Expand Down
2 changes: 2 additions & 0 deletions Zend/zend_globals.h
Expand Up @@ -236,6 +236,8 @@ struct _zend_executor_globals {

HashTable weakrefs;

zend_bool exception_ignore_args;

void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};

Expand Down
6 changes: 6 additions & 0 deletions php.ini-development
Expand Up @@ -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 ;
;;;;;;;;;;;;;;;;;
Expand Down Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions php.ini-production
Expand Up @@ -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 ;
;;;;;;;;;;;;;;;;;
Expand Down

2 comments on commit 0819e6d

@JanTvrdik
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this also affect the result of (new Exception)->getTrace()?

@nikic
Copy link
Member

@nikic nikic commented on 0819e6d Jul 10, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JanTvrdik Yes.

Please sign in to comment.