diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-01-13 09:24:19 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-01-13 09:24:19 +0000 |
commit | d9f7a74a1c97af5b878066447178135a8349d6b5 (patch) | |
tree | 7f684b1038d90f210a5a36ec88520c46247785e2 /contrib/libucl/ucl_parser.c | |
parent | 66da8cd82b10a94a2422b27be23bdd6c7bbebb53 (diff) | |
download | rspamd-d9f7a74a1c97af5b878066447178135a8349d6b5.tar.gz rspamd-d9f7a74a1c97af5b878066447178135a8349d6b5.zip |
[Feature] Allow custom parse types in lua ucl
Diffstat (limited to 'contrib/libucl/ucl_parser.c')
-rw-r--r-- | contrib/libucl/ucl_parser.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/contrib/libucl/ucl_parser.c b/contrib/libucl/ucl_parser.c index fc7cea07f..82c4ca24b 100644 --- a/contrib/libucl/ucl_parser.c +++ b/contrib/libucl/ucl_parser.c @@ -2609,6 +2609,19 @@ ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data, return false; } + if (parse_type == UCL_PARSE_AUTO && len > 0) { + /* We need to detect parse type by the first symbol */ + if ((*data & 0x80) == 0x80 && (*data >= 0xdc && *data <= 0xdf)) { + parse_type = UCL_PARSE_MSGPACK; + } + else if (*data == '(') { + parse_type = UCL_PARSE_CSEXP; + } + else { + parse_type = UCL_PARSE_UCL; + } + } + chunk->begin = data; chunk->remain = len; chunk->pos = chunk->begin; @@ -2635,6 +2648,8 @@ ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data, return ucl_state_machine (parser); case UCL_PARSE_MSGPACK: return ucl_parse_msgpack (parser); + case UCL_PARSE_CSEXP: + return ucl_parse_csexp (parser); } } else { |