diff --git a/server/core/filter.c b/server/core/filter.c index 99525f7f6..3b3ef4dd6 100644 --- a/server/core/filter.c +++ b/server/core/filter.c @@ -318,6 +318,9 @@ filterApply(FILTER_DEF *filter, SESSION *session, DOWNSTREAM *downstream) { DOWNSTREAM *me; + if (filter == NULL) + return NULL; + if (filter->obj == NULL) { /* Filter not yet loaded */ diff --git a/server/core/session.c b/server/core/session.c index 62e1015e4..db59f9e6e 100644 --- a/server/core/session.c +++ b/server/core/session.c @@ -333,13 +333,15 @@ bool session_free( { for (i = 0; i < session->n_filters; i++) { - session->filters[i].filter->obj->closeSession( + if (session->filters[i].filter) + session->filters[i].filter->obj->closeSession( session->filters[i].instance, session->filters[i].session); } for (i = 0; i < session->n_filters; i++) { - session->filters[i].filter->obj->freeSession( + if (session->filters[i].filter) + session->filters[i].filter->obj->freeSession( session->filters[i].instance, session->filters[i].session); } @@ -653,6 +655,14 @@ int i; session->n_filters = service->n_filters; for (i = service->n_filters - 1; i >= 0; i--) { + if (service->filters[i] == NULL) + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Service '%s' contians an unresolved filter.\n", + service->name))); + return 0; + } if ((head = filterApply(service->filters[i], session, &session->head)) == NULL) {