]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix runtime LSAN/ASAN error in src/main/conffile.c
authorJorge Pereira <jpereiran@gmail.com>
Wed, 8 Mar 2023 15:17:44 +0000 (12:17 -0300)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 17 Mar 2023 13:22:46 +0000 (09:22 -0400)
src/main/conffile.c:1831:49: runtime error: applying zero offset to null pointer

src/main/conffile.c

index 8a9297b5d6b6e8f039fa475364b0e1c00fb2c270..42b025bf17b89e204883203325e9dfe20bf9880c 100644 (file)
@@ -1803,6 +1803,7 @@ static void cf_section_parse_init(CONF_SECTION *cs, void *base,
                                  CONF_PARSER const *variables)
 {
        int i;
+       void *data;
 
        for (i = 0; variables[i].name != NULL; i++) {
                if (variables[i].type == PW_TYPE_SUBSECTION) {
@@ -1827,9 +1828,13 @@ static void cf_section_parse_init(CONF_SECTION *cs, void *base,
                                subcs->item.lineno = cs->item.lineno;
                                cf_item_add(cs, &(subcs->item));
                        }
+                       if (base) {
+                               data = ((uint8_t *)base) + variables[i].offset;
+                       } else {
+                               data = NULL;
+                       }
 
-                       cf_section_parse_init(subcs, (uint8_t *)base + variables[i].offset,
-                                             (CONF_PARSER const *) variables[i].dflt);
+                       cf_section_parse_init(subcs, data, (CONF_PARSER const *) variables[i].dflt);
                        continue;
                }
 
@@ -1927,8 +1932,13 @@ int cf_section_parse(CONF_SECTION *cs, void *base, CONF_PARSER const *variables)
                                goto finish;
                        }
 
-                       ret = cf_section_parse(subcs, (uint8_t *)base + variables[i].offset,
-                                              (CONF_PARSER const *) variables[i].dflt);
+                       if (base) {
+                               data = ((uint8_t *)base) + variables[i].offset;
+                       } else {
+                               data = NULL;
+                       }
+
+                       ret = cf_section_parse(subcs, data, (CONF_PARSER const *) variables[i].dflt);
                        if (ret < 0) goto finish;
                        continue;
                } /* else it's a CONF_PAIR */