else {
/* Invalid identifier */
rspamd_cl_set_err (chunk, RSPAMD_CL_ESYNTAX, "key must begin with a letter", err);
- assert (0);
return FALSE;
}
}
{
const guchar *p, *c;
struct rspamd_cl_stack *st;
- rspamd_cl_object_t *obj;
+ rspamd_cl_object_t *obj = NULL;
p = chunk->pos;
while (p < chunk->end) {
- if (parser->stack->obj->type == RSPAMD_CL_ARRAY) {
- /* Object must be allocated */
- obj = rspamd_cl_object_new ();
- parser->cur_obj = obj;
- LL_PREPEND (parser->stack->obj->value.ov, parser->cur_obj);
- }
- else {
- /* Object has been already allocated */
- obj = parser->cur_obj;
+ if (obj == NULL) {
+ if (parser->stack->obj->type == RSPAMD_CL_ARRAY) {
+ /* Object must be allocated */
+ obj = rspamd_cl_object_new ();
+ parser->cur_obj = obj;
+ LL_PREPEND (parser->stack->obj->value.ov, parser->cur_obj);
+ }
+ else {
+ /* Object has been already allocated */
+ obj = parser->cur_obj;
+ }
}
c = p;
switch (*p) {
"\"key1\": \"value;\""
"}\n",
/* Nginx like */
- "section1 { param1 = value; param2 = value, param3 = [\"value1\", value2, 100500]}\n"
+ "section1 { param1 = value; param2 = value, "
+ "section3 {param = value; param2 = value, param3 = [\"value1\", value2, 100500]}}\n"
"section2 { param1 = {key = value}, param1 = [\"key\"]}",
/* Numbers */
"key = 1s\n"
"key4: s1,"
"\"key5\": \"\\n\\r123\"",
/* Macros */
- "section1 {key = value; .include \"./test.cfg\"}",
+ "section1 {key = value; section {\n"
+ "param = \"value\";\n"
+ "param2 = value\n"
+ "array = [ 1, 1mb, test]}\n"
+ ".include \"./test.cfg\"}",
NULL
};