Skip to content

Commit 0decd05

Browse files
committed
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;
1 parent d8a4242 commit 0decd05

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

src/host/modem/Modem.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,6 +1412,10 @@ bool Modem::writeDMRFrame1(const uint8_t* data, uint32_t length, bool imm)
14121412
}
14131413

14141414
m_dmrSpace1 -= length;
1415+
if ((int32_t)m_dmrSpace1 < 0U) {
1416+
LogError(LOG_MODEM, "Modem::writeDMRFrame1(), dmrSpace1 underflow, space = %u, length = %u", m_dmrSpace1, length);
1417+
m_dmrSpace1 = 0U;
1418+
}
14151419
}
14161420
else {
14171421
return false;
@@ -1466,6 +1470,10 @@ bool Modem::writeDMRFrame2(const uint8_t* data, uint32_t length, bool imm)
14661470
}
14671471

14681472
m_dmrSpace2 -= length;
1473+
if ((int32_t)m_dmrSpace2 < 0U) {
1474+
LogError(LOG_MODEM, "Modem::writeDMRFrame2(), dmrSpace2 underflow, space = %u, length = %u", m_dmrSpace2, length);
1475+
m_dmrSpace2 = 0U;
1476+
}
14691477
}
14701478
else {
14711479
return false;
@@ -1532,18 +1540,11 @@ bool Modem::writeP25Frame(const uint8_t* data, uint32_t length, bool imm)
15321540
return false;
15331541
}
15341542

1535-
/*
1536-
** bryanb: this change is from Tim's fork, but it is a bit concerning, because we're not adjusting
1537-
** available modem space appropriately, if there isn't enough space for the frame being written in the first
1538-
** place -- for now i've commented this out but included it, reasonably speaking m_p25Space doesn't even
1539-
** matter because writeSerial() in ModemV24 doesn't even check this before writing to the port
1540-
*/
1541-
/*
1542-
if (m_p25Space >= length) {
1543-
m_p25Space -= length;
1544-
}
1545-
*/
15461543
m_p25Space -= length;
1544+
if ((int32_t)m_p25Space < 0U) {
1545+
LogError(LOG_MODEM, "Modem::writeP25Frame(), p25Space underflow, space = %u, length = %u", m_p25Space, length);
1546+
m_p25Space = 0U;
1547+
}
15471548
}
15481549
else {
15491550
return false;
@@ -1598,6 +1599,10 @@ bool Modem::writeNXDNFrame(const uint8_t* data, uint32_t length, bool imm)
15981599
}
15991600

16001601
m_nxdnSpace -= length;
1602+
if ((int32_t)m_nxdnSpace < 0U) {
1603+
LogError(LOG_MODEM, "Modem::writeNXDNFrame(), nxdnSpace underflow, space = %u, length = %u", m_nxdnSpace, length);
1604+
m_nxdnSpace = 0U;
1605+
}
16011606
}
16021607
else {
16031608
return false;

0 commit comments

Comments
 (0)