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