]> source.dussan.org Git - rspamd.git/commitdiff
Fix whitespace parsing for rcl arrays.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 21 Aug 2013 14:58:53 +0000 (15:58 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 21 Aug 2013 14:58:53 +0000 (15:58 +0100)
src/rcl/rcl_parser.c
test/rspamd_rcl_test.c

index 90202b6c5977cb82af0867ac5a42f53de85f897c..797c8850c24c3346965afc6b6630569d858655db 100644 (file)
@@ -573,7 +573,6 @@ rspamd_cl_parse_key (struct rspamd_cl_parser *parser,
                        else {
                                /* Invalid identifier */
                                rspamd_cl_set_err (chunk, RSPAMD_CL_ESYNTAX, "key must begin with a letter", err);
-                               assert (0);
                                return FALSE;
                        }
                }
@@ -724,20 +723,22 @@ rspamd_cl_parse_value (struct rspamd_cl_parser *parser, struct rspamd_cl_chunk *
 {
        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) {
index 089f964528b79cb1a22d1fc2b42d72cfa535ee66..c4e1144099a0b4e49536ace80d0e834ffe72ba81 100644 (file)
@@ -34,7 +34,8 @@ const gchar *rcl_test_valid[] = {
                "\"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"
@@ -50,7 +51,11 @@ const gchar *rcl_test_valid[] = {
                "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
 };