Clear log if invalid
This commit is contained in:
@@ -80,10 +80,12 @@ std::string getLastLogs() {
|
||||
return output;
|
||||
}
|
||||
|
||||
void sanitizeLogHead() {
|
||||
bool sanitizeLogHead() {
|
||||
if (logHead >= MAX_LOG_LINES) {
|
||||
logHead = 0;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void clearLastLogs() {
|
||||
|
||||
@@ -57,9 +57,11 @@ void logPrintf(const char* level, const char* origin, const char* format, ...);
|
||||
|
||||
std::string getLastLogs();
|
||||
void clearLastLogs();
|
||||
// Clamps logHead into range without wiping messages — safe to call on panic
|
||||
// reboots where the panic occurred before begin() ever had a chance to run.
|
||||
void sanitizeLogHead();
|
||||
// Clamps logHead into range. Returns true if logHead was out of range (repaired),
|
||||
// which also means logMessages is untrusted garbage. Callers should call
|
||||
// clearLastLogs() when this returns true so getLastLogs() does not dump corrupt
|
||||
// data into crash reports.
|
||||
bool sanitizeLogHead();
|
||||
|
||||
class MySerialImpl : public Print {
|
||||
public:
|
||||
|
||||
@@ -79,7 +79,11 @@ void begin() {
|
||||
} else {
|
||||
// Panic reboot: preserve logs and panic info, but clamp logHead in case the
|
||||
// panic occurred before begin() ever ran (e.g. in a static constructor).
|
||||
sanitizeLogHead();
|
||||
// If logHead was out of range, logMessages is also garbage — clear it so
|
||||
// getLastLogs() does not dump corrupt data into the crash report.
|
||||
if (sanitizeLogHead()) {
|
||||
clearLastLogs();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user