based on Tims changes for writeP25Frame() instead of checking if the frame being written is greater than the available space then decrementing the m_p25Space, lets properly decrement the space and do an underflow check, because I am pretty confident that is the real problem here;

pull/117/head
Bryan Biedenkapp 3 weeks ago
parent d8a424249a
commit 0decd05937

@ -1412,6 +1412,10 @@ bool Modem::writeDMRFrame1(const uint8_t* data, uint32_t length, bool imm)
} }
m_dmrSpace1 -= length; m_dmrSpace1 -= length;
if ((int32_t)m_dmrSpace1 < 0U) {
LogError(LOG_MODEM, "Modem::writeDMRFrame1(), dmrSpace1 underflow, space = %u, length = %u", m_dmrSpace1, length);
m_dmrSpace1 = 0U;
}
} }
else { else {
return false; return false;
@ -1466,6 +1470,10 @@ bool Modem::writeDMRFrame2(const uint8_t* data, uint32_t length, bool imm)
} }
m_dmrSpace2 -= length; m_dmrSpace2 -= length;
if ((int32_t)m_dmrSpace2 < 0U) {
LogError(LOG_MODEM, "Modem::writeDMRFrame2(), dmrSpace2 underflow, space = %u, length = %u", m_dmrSpace2, length);
m_dmrSpace2 = 0U;
}
} }
else { else {
return false; return false;
@ -1532,18 +1540,11 @@ bool Modem::writeP25Frame(const uint8_t* data, uint32_t length, bool imm)
return false; return false;
} }
/*
** bryanb: this change is from Tim's fork, but it is a bit concerning, because we're not adjusting
** available modem space appropriately, if there isn't enough space for the frame being written in the first
** place -- for now i've commented this out but included it, reasonably speaking m_p25Space doesn't even
** matter because writeSerial() in ModemV24 doesn't even check this before writing to the port
*/
/*
if (m_p25Space >= length) {
m_p25Space -= length;
}
*/
m_p25Space -= length; m_p25Space -= length;
if ((int32_t)m_p25Space < 0U) {
LogError(LOG_MODEM, "Modem::writeP25Frame(), p25Space underflow, space = %u, length = %u", m_p25Space, length);
m_p25Space = 0U;
}
} }
else { else {
return false; return false;
@ -1598,6 +1599,10 @@ bool Modem::writeNXDNFrame(const uint8_t* data, uint32_t length, bool imm)
} }
m_nxdnSpace -= length; m_nxdnSpace -= length;
if ((int32_t)m_nxdnSpace < 0U) {
LogError(LOG_MODEM, "Modem::writeNXDNFrame(), nxdnSpace underflow, space = %u, length = %u", m_nxdnSpace, length);
m_nxdnSpace = 0U;
}
} }
else { else {
return false; return false;

Loading…
Cancel
Save

Powered by TurnKey Linux.