summaryrefslogtreecommitdiff
path: root/suhosin.c
diff options
context:
space:
mode:
Diffstat (limited to 'suhosin.c')
-rw-r--r--suhosin.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/suhosin.c b/suhosin.c
index f3e6317..f0a94b9 100644
--- a/suhosin.c
+++ b/suhosin.c
@@ -581,6 +581,43 @@ static ZEND_INI_MH(OnUpdate_cookie_plainlist)
581 return SUCCESS; 581 return SUCCESS;
582} 582}
583 583
584static ZEND_INI_MH(OnUpdate_disable_display_errors) /* {{{ */
585{
586 zend_bool *p;
587#ifndef ZTS
588 char *base = (char *) mh_arg2;
589#else
590 char *base;
591
592 base = (char *) ts_resource(*((int *) mh_arg2));
593#endif
594
595 p = (zend_bool *) (base+(size_t) mh_arg1);
596
597 if (new_value_length == 2 && strcasecmp("on", new_value) == 0) {
598 *p = (zend_bool) 1;
599 }
600 else if (new_value_length == 3 && strcasecmp("yes", new_value) == 0) {
601 *p = (zend_bool) 1;
602 }
603 else if (new_value_length == 4 && strcasecmp("true", new_value) == 0) {
604 *p = (zend_bool) 1;
605 }
606 else if (new_value_length == 4 && strcasecmp("fail", new_value) == 0) {
607 *p = (zend_bool) 2;
608 }
609 else {
610 *p = (zend_bool) atoi(new_value);
611 }
612 return SUCCESS;
613}
614/* }}} */
615
616static ZEND_INI_MH(OnUpdate_fail)
617{
618 return FAILURE;
619}
620
584/* {{{ proto void suhosin_register_cookie_variable(char *var, zval *val, zval *track_vars_array TSRMLS_DC) 621/* {{{ proto void suhosin_register_cookie_variable(char *var, zval *val, zval *track_vars_array TSRMLS_DC)
585 Registers a cookie in the RAW cookie array */ 622 Registers a cookie in the RAW cookie array */
586static void suhosin_register_cookie_variable(char *var, zval *val, zval *track_vars_array TSRMLS_DC) 623static void suhosin_register_cookie_variable(char *var, zval *val, zval *track_vars_array TSRMLS_DC)
@@ -905,7 +942,7 @@ PHP_INI_BEGIN()
905 STD_ZEND_INI_BOOLEAN("suhosin.coredump", "0", ZEND_INI_SYSTEM, OnUpdateBool, coredump, zend_suhosin_globals, suhosin_globals) 942 STD_ZEND_INI_BOOLEAN("suhosin.coredump", "0", ZEND_INI_SYSTEM, OnUpdateBool, coredump, zend_suhosin_globals, suhosin_globals)
906 STD_ZEND_INI_BOOLEAN("suhosin.stealth", "1", ZEND_INI_SYSTEM, OnUpdateBool, stealth, zend_suhosin_globals, suhosin_globals) 943 STD_ZEND_INI_BOOLEAN("suhosin.stealth", "1", ZEND_INI_SYSTEM, OnUpdateBool, stealth, zend_suhosin_globals, suhosin_globals)
907 STD_ZEND_INI_BOOLEAN("suhosin.apc_bug_workaround", "0", ZEND_INI_SYSTEM, OnUpdateBool, apc_bug_workaround, zend_suhosin_globals, suhosin_globals) 944 STD_ZEND_INI_BOOLEAN("suhosin.apc_bug_workaround", "0", ZEND_INI_SYSTEM, OnUpdateBool, apc_bug_workaround, zend_suhosin_globals, suhosin_globals)
908 STD_ZEND_INI_BOOLEAN("suhosin.disable.display_errors", "0", ZEND_INI_SYSTEM, OnUpdateBool, disable_display_errors, zend_suhosin_globals, suhosin_globals) 945 STD_ZEND_INI_BOOLEAN("suhosin.disable.display_errors", "0", ZEND_INI_SYSTEM, OnUpdate_disable_display_errors, disable_display_errors, zend_suhosin_globals, suhosin_globals)
909 946
910 947
911 948
@@ -1104,8 +1141,13 @@ PHP_MINIT_FUNCTION(suhosin)
1104 zend_ini_entry *i; 1141 zend_ini_entry *i;
1105 if (zend_hash_find(EG(ini_directives), "display_errors", sizeof("display_errors"), (void **) &i) == SUCCESS) { 1142 if (zend_hash_find(EG(ini_directives), "display_errors", sizeof("display_errors"), (void **) &i) == SUCCESS) {
1106 if (i->on_modify) { 1143 if (i->on_modify) {
1107 i->on_modify(i, "0", sizeof("0"), i->mh_arg1, i->mh_arg2, i->mh_arg3, ZEND_INI_STAGE_STARTUP TSRMLS_CC); 1144 if (SUHOSIN_G(disable_display_errors) > 1) {
1108 i->on_modify = NULL; 1145 zend_alter_ini_entry_ex("display_errors", sizeof("display_errors"), "0", sizeof("0"), ZEND_INI_SYSTEM, ZEND_INI_STAGE_STARTUP, 0 TSRMLS_CC);
1146 i->on_modify = OnUpdate_fail;
1147 } else {
1148 i->on_modify(i, "Off", sizeof("off"), i->mh_arg1, i->mh_arg2, i->mh_arg3, ZEND_INI_STAGE_STARTUP TSRMLS_CC);
1149 i->on_modify = NULL;
1150 }
1109 } 1151 }
1110 } 1152 }
1111 } 1153 }