Mercurial > dovecot > core-2.2
changeset 21280:953aac0beb29
config: Avoid excessive data stack usage when matching local_name
Moved config_filter_match_local_name() to its own function to make
adding the data stack frame easier.
Based on patch by J. Nick Koston
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 09 Dec 2016 11:11:11 +0000 |
parents | 136a42b63ef8 |
children | 1ba00e3ae6cd |
files | src/config/config-filter.c |
diffstat | 1 files changed, 20 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/src/config/config-filter.c Fri Dec 09 09:57:57 2016 +0100 +++ b/src/config/config-filter.c Fri Dec 09 11:11:11 2016 +0000 @@ -31,22 +31,32 @@ return TRUE; } +static bool +config_filter_match_local_name(const struct config_filter *mask, + const char *filter_local_name) +{ + /* Handle multiple names seperated by spaces in local_name + * Ex: local_name "mail.domain.tld domain.tld mx.domain.tld" { ... } */ + const char *const *local_name = t_strsplit_spaces(mask->local_name, " "); + + for (; *local_name != NULL; local_name++) { + if (dns_match_wildcard(filter_local_name, *local_name) == 0) + return TRUE; + } + return FALSE; +} + static bool config_filter_match_rest(const struct config_filter *mask, const struct config_filter *filter) { + bool matched; + if (mask->local_name != NULL) { if (filter->local_name == NULL) return FALSE; - /* Handle multiple names seperated by spaces in local_name - * Ex: local_name "mail.domain.tld domain.tld mx.domain.tld" { ... } */ - const char *const *local_name = t_strsplit_spaces(mask->local_name, " "); - bool matched = FALSE; - for (; *local_name != NULL; local_name++) { - if (dns_match_wildcard(filter->local_name, *local_name) == 0) { - matched = TRUE; - break; - } - } + T_BEGIN { + matched = config_filter_match_local_name(mask, filter->local_name); + } T_END; if (!matched) return FALSE; }