mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-08-01 01:36:12 +00:00
fix: guard findChannelIdx == -1 + scope trail_units reset
C1/C2: onChannelMessageRecv and onChannelDataRecv both passed findChannelIdx() through (uint8_t), so an unknown-secret packet turned -1 into 255 and the message flowed into the offline queue, UI history, notification and bot reply with a bogus channel index. Drop such packets at the recv path; also harden addChannelMsg with an MAX_GROUP_CHANNELS bounds check so a future caller can't poison the channel-history ring buffer either. H4: loadPrefsInt always reset trail_units_idx on sentinel mismatch, even for jumps where the field was saved correctly (e.g. 0xC0DE0004 → 0xC0DE0005). Scope the reset to sentinel == 0xC0DE0003, which is the only case where the byte at that offset is actually the stale sentinel low byte. FEATURES.md: mark these three items as ✅ in the audit backlog. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -412,6 +412,10 @@ public:
|
||||
}
|
||||
|
||||
void addChannelMsg(uint8_t ch_idx, const char* text) {
|
||||
// Guard against bogus channel indices (e.g. findChannelIdx() returned -1
|
||||
// and was cast to uint8_t → 255). Storing such an entry would burn a ring
|
||||
// slot for a message that no visible channel can ever surface.
|
||||
if (ch_idx >= MAX_GROUP_CHANNELS) return;
|
||||
int pos;
|
||||
if (_hist_count < CH_HIST_MAX) {
|
||||
pos = (_hist_head + _hist_count) % CH_HIST_MAX;
|
||||
@@ -425,10 +429,8 @@ public:
|
||||
strncpy(_hist[pos].text, text, sizeof(_hist[pos].text) - 1);
|
||||
_hist[pos].text[sizeof(_hist[pos].text) - 1] = '\0';
|
||||
|
||||
if (ch_idx < MAX_GROUP_CHANNELS) {
|
||||
bool viewing = (_phase == CHANNEL_HIST && _sel_channel_idx == (int)ch_idx);
|
||||
if (!viewing && _ch_unread[ch_idx] < 99) _ch_unread[ch_idx]++;
|
||||
}
|
||||
bool viewing = (_phase == CHANNEL_HIST && _sel_channel_idx == (int)ch_idx);
|
||||
if (!viewing && _ch_unread[ch_idx] < 99) _ch_unread[ch_idx]++;
|
||||
}
|
||||
|
||||
void addDMMsg(const uint8_t* pub_key, bool outgoing, const char* text) {
|
||||
|
||||
Reference in New Issue
Block a user