@@ -47,7 +47,11 @@ void dumpPrefs(fs::FS &fs){
47
47
if (fs.exists (PREFERENCES_FILE)) {
48
48
// Dump contents for debug
49
49
File file = fs.open (PREFERENCES_FILE, FILE_READ);
50
- while (file.available ()) Serial.print (char (file.read ()));
50
+ int countSize = 0 ;
51
+ while (file.available () && countSize <= PREFERENCES_MAX_SIZE) {
52
+ Serial.print (char (file.read ()));
53
+ countSize++;
54
+ }
51
55
Serial.println (" " );
52
56
file.close ();
53
57
} else {
@@ -62,15 +66,25 @@ void loadPrefs(fs::FS &fs){
62
66
Serial.printf (" Loading preferences from file %s\r\n " , PREFERENCES_FILE);
63
67
File file = fs.open (PREFERENCES_FILE, FILE_READ);
64
68
if (!file) {
65
- Serial.println (" Failed to open preferences file" );
69
+ Serial.println (" Failed to open preferences file for reading, maybe corrupt, removing" );
70
+ removePrefs (SPIFFS);
66
71
return ;
67
72
}
68
73
size_t size = file.size ();
69
- if (size > 800 ) {
70
- Serial.println (" Preferences file size is too large, maybe corrupt" );
74
+ if (size > PREFERENCES_MAX_SIZE) {
75
+ Serial.println (" Preferences file size is too large, maybe corrupt, removing" );
76
+ removePrefs (SPIFFS);
71
77
return ;
72
78
}
73
- while (file.available ()) prefs += char (file.read ());
79
+ while (file.available ()) {
80
+ prefs += char (file.read ());
81
+ if (prefs.length () > size) {
82
+ // corrupted SPIFFS files can return data beyond their declared size.
83
+ Serial.println (" Preferences file failed to load properly, appears to be corrupt, removing" );
84
+ removePrefs (SPIFFS);
85
+ return ;
86
+ }
87
+ }
74
88
// get sensor reference
75
89
sensor_t * s = esp_camera_sensor_get ();
76
90
// process all the settings
0 commit comments