diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-03-26 15:41:04 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-03-26 15:41:04 +0000 |
commit | ab4950c5eac19bd5d5aeac2a1c4772e9fd893f37 (patch) | |
tree | 23f5d8fa67821be47be7e0f0ab7391795e66bb65 /contrib | |
parent | 3bf124702cfd42962e321791ba0849c4a5799ecd (diff) | |
download | rspamd-ab4950c5eac19bd5d5aeac2a1c4772e9fd893f37.tar.gz rspamd-ab4950c5eac19bd5d5aeac2a1c4772e9fd893f37.zip |
[Minor] Allow unconditional special handlers
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/libucl/ucl.h | 9 | ||||
-rw-r--r-- | contrib/libucl/ucl_parser.c | 5 |
2 files changed, 12 insertions, 2 deletions
diff --git a/contrib/libucl/ucl.h b/contrib/libucl/ucl.h index f7f8354c5..482812d46 100644 --- a/contrib/libucl/ucl.h +++ b/contrib/libucl/ucl.h @@ -1295,11 +1295,20 @@ typedef bool (*ucl_parser_special_handler_t) (struct ucl_parser *parser, void *user_data); /** + * Special handler flags + */ +enum ucl_special_handler_flags { + UCL_SPECIAL_HANDLER_DEFAULT = 0, + UCL_SPECIAL_HANDLER_PREPROCESS_ALL = (1u << 0), +}; + +/** * Special handler structure */ struct ucl_parser_special_handler { const unsigned char *magic; size_t magic_len; + enum ucl_special_handler_flags flags; ucl_parser_special_handler_t handler; void (*free_function) (unsigned char *data, size_t len, void *user_data); void *user_data; diff --git a/contrib/libucl/ucl_parser.c b/contrib/libucl/ucl_parser.c index 574e240ab..59bfd7727 100644 --- a/contrib/libucl/ucl_parser.c +++ b/contrib/libucl/ucl_parser.c @@ -2862,8 +2862,9 @@ ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data, memset (chunk, 0, sizeof (*chunk)); LL_FOREACH (parser->special_handlers, special_handler) { - if (len >= special_handler->magic_len && - memcmp (data, special_handler->magic, special_handler->magic_len) == 0) { + if ((special_handler->flags & UCL_SPECIAL_HANDLER_PREPROCESS_ALL) || + (len >= special_handler->magic_len && + memcmp (data, special_handler->magic, special_handler->magic_len) == 0)) { unsigned char *ndata = NULL; size_t nlen = 0; |