set token delimeters for the server.config parser, fixes #760

Fri, 21 Nov 2025 17:16:46 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 21 Nov 2025 17:16:46 +0100
changeset 631
867b1026b0de
parent 630
aae6e06d70b8
child 632
1defab20b477

set token delimeters for the server.config parser, fixes #760

src/server/config/objconf.c file | annotate | diff | comparison | revisions
src/server/config/serverconfig.c file | annotate | diff | comparison | revisions
--- a/src/server/config/objconf.c	Wed Nov 12 18:27:15 2025 +0100
+++ b/src/server/config/objconf.c	Fri Nov 21 17:16:46 2025 +0100
@@ -52,7 +52,7 @@
     memset(&parser, 0, sizeof(ConfigParser2));
     parser.mp = mp;
     parser.filename = file;
-    parser.delim = "()/*%";
+    parser.delim = "(){}/*%";
     parser.validateDirective = objectconf_validate_directive;
     parser.validateObjBegin = objectconf_validate_objbegin;
     parser.validateObjEnd = objectconf_validate_objend;
--- a/src/server/config/serverconfig.c	Wed Nov 12 18:27:15 2025 +0100
+++ b/src/server/config/serverconfig.c	Fri Nov 21 17:16:46 2025 +0100
@@ -50,7 +50,7 @@
     parser.mp = mp;
     parser.filename = file;
     parser.allow_hierarchy = true;
-    parser.delim = "";
+    parser.delim = "{}";
     ConfigNode *root = serverconfig_load_file(&parser, file);
     if(!root) {
         cxMempoolFree(mp);
@@ -123,7 +123,7 @@
     int i;
     char prev = 0;
     for(i=start;i<content.length;i++) {
-        char c = content.ptr[i];
+        char c = content.ptr[i];    
         if(c == '\n') {
             if(quote) {
                 *pos = i;
@@ -302,7 +302,6 @@
     int err = 0;
     while((token = get_next_token(parser, content, &pos)).type != CFG_NO_TOKEN) {
         //printf("[%.*s]\n", (int)token.content.length, token.content.ptr); fflush(stdout);
-
         switch(token.type) {
             case CFG_NO_TOKEN: break;
             case CFG_TOKEN_COMMENT: {
@@ -331,6 +330,10 @@
                     }
                     // done with this object, remove it from the stack
                     ConfigNodeStack *remove_item = node_stack;
+                    if(!node_stack) {
+                        err = 1;
+                        break;
+                    }
                     node_stack = node_stack->next;
                     cxFree(a, remove_item);
                 } else if(current->type == CONFIG_NODE_OPEN_OBJECT) {

mercurial