:: commit 2f19d814b0cc8e9e71d9987cbaeabedddbb3adee

Mintsuki <mintsuki@protonmail.com> — 2026-01-11 23:42

parents: 0d277afff3

config: Add bounds checks to whitespace removal and macro parsing

diff --git a/common/lib/config.c b/common/lib/config.c
index beaf781c..d8f85e1c 100644
--- a/common/lib/config.c
+++ b/common/lib/config.c
@@ -366,16 +366,17 @@ int init_config(size_t config_size) {
     for (size_t i = 0; i < config_size; i++) {
         size_t skip = 0;
         if (config_addr[i] == ' ' || config_addr[i] == '\t') {
-            while (config_addr[i + skip] == ' ' || config_addr[i + skip] == '\t') {
+            while (i + skip < config_size && (config_addr[i + skip] == ' ' || config_addr[i + skip] == '\t')) {
                 skip++;
             }
-            if (config_addr[i + skip] == '\n') {
+            if (i + skip < config_size && config_addr[i + skip] == '\n') {
                 goto skip_loop;
             }
             skip = 0;
         }
-        while ((config_addr[i + skip] == '\r')
-            || ((!i || config_addr[i - 1] == '\n') && (config_addr[i + skip] == ' ' || config_addr[i + skip] == '\t'))
+        while (i + skip < config_size
+            && ((config_addr[i + skip] == '\r')
+                || ((!i || config_addr[i - 1] == '\n') && (config_addr[i + skip] == ' ' || config_addr[i + skip] == '\t')))
         ) {
             skip++;
         }
@@ -486,7 +487,7 @@ skip_loop:
                         panic(true, "config: Malformed macro usage");
                     }
                 }
-                if (config_addr[i++] != '=') {
+                if (i >= config_size || config_addr[i++] != '=') {
                     i = orig_i;
                     goto next;
                 }
tab: 248 wrap: offon