diff options
Diffstat (limited to 'log.c')
| -rw-r--r-- | log.c | 19 |
1 files changed, 16 insertions, 3 deletions
| @@ -94,6 +94,7 @@ PHP_SUHOSIN_API void suhosin_log(int loglevel, char *fmt, ...) | |||
| 94 | { | 94 | { |
| 95 | int s, r, i=0, fd; | 95 | int s, r, i=0, fd; |
| 96 | long written, towrite; | 96 | long written, towrite; |
| 97 | int getcaller=0; | ||
| 97 | char *wbuf; | 98 | char *wbuf; |
| 98 | struct timeval tv; | 99 | struct timeval tv; |
| 99 | time_t now; | 100 | time_t now; |
| @@ -115,6 +116,12 @@ PHP_SUHOSIN_API void suhosin_log(int loglevel, char *fmt, ...) | |||
| 115 | va_list ap; | 116 | va_list ap; |
| 116 | TSRMLS_FETCH(); | 117 | TSRMLS_FETCH(); |
| 117 | 118 | ||
| 119 | #if PHP_VERSION_ID >= 50500 | ||
| 120 | getcaller = (loglevel & S_GETCALLER) == S_GETCALLER; | ||
| 121 | #endif | ||
| 122 | /* remove the S_GETCALLER flag */ | ||
| 123 | loglevel = loglevel & ~S_GETCALLER; | ||
| 124 | |||
| 118 | SDEBUG("(suhosin_log) loglevel: %d log_syslog: %u - log_sapi: %u - log_script: %u", loglevel, SUHOSIN_G(log_syslog), SUHOSIN_G(log_sapi), SUHOSIN_G(log_script)); | 125 | SDEBUG("(suhosin_log) loglevel: %d log_syslog: %u - log_sapi: %u - log_script: %u", loglevel, SUHOSIN_G(log_syslog), SUHOSIN_G(log_sapi), SUHOSIN_G(log_script)); |
| 119 | 126 | ||
| 120 | /* dump core if wanted */ | 127 | /* dump core if wanted */ |
| @@ -151,9 +158,15 @@ PHP_SUHOSIN_API void suhosin_log(int loglevel, char *fmt, ...) | |||
| 151 | } | 158 | } |
| 152 | 159 | ||
| 153 | if (zend_is_executing(TSRMLS_C)) { | 160 | if (zend_is_executing(TSRMLS_C)) { |
| 154 | if (EG(current_execute_data)) { | 161 | zend_execute_data *exdata = EG(current_execute_data); |
| 155 | lineno = EG(current_execute_data)->opline->lineno; | 162 | if (exdata) { |
| 156 | fname = EG(current_execute_data)->op_array->filename; | 163 | if (getcaller && exdata->prev_execute_data) { |
| 164 | lineno = exdata->prev_execute_data->opline->lineno; | ||
| 165 | fname = exdata->prev_execute_data->op_array->filename; | ||
| 166 | } else { | ||
| 167 | lineno = exdata->opline->lineno; | ||
| 168 | fname = exdata->op_array->filename; | ||
| 169 | } | ||
| 157 | } else { | 170 | } else { |
| 158 | lineno = zend_get_executed_lineno(TSRMLS_C); | 171 | lineno = zend_get_executed_lineno(TSRMLS_C); |
| 159 | fname = zend_get_executed_filename(TSRMLS_C); | 172 | fname = zend_get_executed_filename(TSRMLS_C); |
