2525 } \
2626 } while (0)
2727
28+ #define SETTINGS_LOAD_BUFFER_LEN 256
2829#define OVERLAY_CONFIG_PREFIX "overlay."
2930static settings_t Settings_Overlay [MAX_OVERLAYS ];
3031static 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
736737error_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