summaryrefslogtreecommitdiff
path: root/log.c
diff options
context:
space:
mode:
Diffstat (limited to 'log.c')
-rw-r--r--log.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/log.c b/log.c
index 4df9a6a..ea81cae 100644
--- a/log.c
+++ b/log.c
@@ -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);