Skip to content

Commit 05d896b

Browse files
committed
fix config line oversize or missing newline on last line
1 parent 422dff7 commit 05d896b

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

src/settings.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
} \
2626
} while (0)
2727

28+
#define SETTINGS_LOAD_BUFFER_LEN 256
2829
#define OVERLAY_CONFIG_PREFIX "overlay."
2930
static settings_t Settings_Overlay[MAX_OVERLAYS];
3031
static setting_item_t *Option_Map_Overlay[MAX_OVERLAYS];
@@ -727,10 +728,10 @@ error_t settings_load()
727728
err = settings_load_ovl(false);
728729
if (err == NO_ERROR)
729730
{
730-
err = settings_load_ovl(true);
731+
err = settings_load_ovl(true);
731732
}
732733
mutex_unlock(MUTEX_SETTINGS_LOAD);
733-
return err;
734+
return err;
734735
}
735736

736737
error_t settings_load_ovl(bool overlay)
@@ -750,7 +751,7 @@ error_t settings_load_ovl(bool overlay)
750751

751752
error_t err = settings_save_ovl(overlay);
752753
mutex_unlock(MUTEX_SETTINGS_LOAD_OVL);
753-
return err;
754+
return err;
754755
}
755756

756757
uint32_t file_size;
@@ -771,7 +772,7 @@ error_t settings_load_ovl(bool overlay)
771772
}
772773

773774
// Buffer to hold the file content
774-
char buffer[256];
775+
char buffer[SETTINGS_LOAD_BUFFER_LEN];
775776
size_t from_read;
776777
size_t read_length;
777778
bool last_line_incomplete = false;
@@ -885,8 +886,25 @@ error_t settings_load_ovl(bool overlay)
885886
last_line_incomplete = (buffer[read_length - 1] != '\n');
886887
if (last_line_incomplete)
887888
{
888-
from_read = strlen(line);
889-
memmove(buffer, line, from_read);
889+
if (line == buffer)
890+
{
891+
if (read_length == SETTINGS_LOAD_BUFFER_LEN - 1)
892+
{
893+
TRACE_ERROR("Cannot read config file, line too big for buffer, cutting line %s\r\n", line);
894+
}
895+
else
896+
{
897+
TRACE_WARNING("Last line of config is missing a newline %s\r\n", line);
898+
from_read++;
899+
read_length++;
900+
}
901+
line[read_length - 1] = '\n';
902+
}
903+
else
904+
{
905+
from_read = strlen(line);
906+
memmove(buffer, line, from_read);
907+
}
890908
}
891909
else
892910
{

0 commit comments

Comments
 (0)