diff options
| -rw-r--r-- | log.c | 13 |
1 files changed, 8 insertions, 5 deletions
| @@ -112,7 +112,7 @@ PHP_SUHOSIN_API void suhosin_log(int loglevel, char *fmt, ...) | |||
| 112 | char *ip_address; | 112 | char *ip_address; |
| 113 | char *fname; | 113 | char *fname; |
| 114 | char *alertstring; | 114 | char *alertstring; |
| 115 | int lineno; | 115 | int lineno = 0; |
| 116 | va_list ap; | 116 | va_list ap; |
| 117 | TSRMLS_FETCH(); | 117 | TSRMLS_FETCH(); |
| 118 | 118 | ||
| @@ -160,12 +160,15 @@ PHP_SUHOSIN_API void suhosin_log(int loglevel, char *fmt, ...) | |||
| 160 | if (zend_is_executing(TSRMLS_C)) { | 160 | if (zend_is_executing(TSRMLS_C)) { |
| 161 | zend_execute_data *exdata = EG(current_execute_data); | 161 | zend_execute_data *exdata = EG(current_execute_data); |
| 162 | if (exdata) { | 162 | if (exdata) { |
| 163 | if (getcaller && exdata->prev_execute_data) { | 163 | if (getcaller && exdata->prev_execute_data && exdata->prev_execute_data->opline && exdata->prev_execute_data->op_array) { |
| 164 | lineno = exdata->prev_execute_data->opline->lineno; | 164 | lineno = exdata->prev_execute_data->opline->lineno; |
| 165 | fname = (char *)exdata->prev_execute_data->op_array->filename; | 165 | fname = (char *)exdata->prev_execute_data->op_array->filename; |
| 166 | } else { | 166 | } else if (exdata->opline && exdata->op_array) { |
| 167 | lineno = exdata->opline->lineno; | 167 | lineno = exdata->opline->lineno; |
| 168 | fname = (char *)exdata->op_array->filename; | 168 | fname = (char *)exdata->op_array->filename; |
| 169 | } else { | ||
| 170 | lineno = 0; | ||
| 171 | fname = "[unknown filename]"; | ||
| 169 | } | 172 | } |
| 170 | } else { | 173 | } else { |
| 171 | lineno = zend_get_executed_lineno(TSRMLS_C); | 174 | lineno = zend_get_executed_lineno(TSRMLS_C); |
