From 0c635f5132d30f938b424aa30a33a7c8a26d8b5a Mon Sep 17 00:00:00 2001 From: Jonathan Naylor Date: Mon, 13 Jun 2016 19:47:45 +0100 Subject: [PATCH] Sanity check the ring buffers. --- CWIdTX.cpp | 2 +- DMRTX.cpp | 2 +- DStarTX.cpp | 2 +- SampleRB.cpp | 13 ++++++++++--- SerialRB.cpp | 13 ++++++++++--- YSFTX.cpp | 2 +- 6 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CWIdTX.cpp b/CWIdTX.cpp index de666ec..185d72e 100644 --- a/CWIdTX.cpp +++ b/CWIdTX.cpp @@ -101,7 +101,7 @@ void CCWIdTX::process() uint16_t space = io.getSpace(); - while (space > CYCLE_LENGTH && space <= TX_RINGBUFFER_SIZE) { + while (space > CYCLE_LENGTH) { bool b = READ_BIT1(m_poBuffer, m_poPtr); if (b) io.write(TONE, CYCLE_LENGTH); diff --git a/DMRTX.cpp b/DMRTX.cpp index a78a966..3406ff6 100644 --- a/DMRTX.cpp +++ b/DMRTX.cpp @@ -113,7 +113,7 @@ void CDMRTX::process() if (m_poLen > 0U) { uint16_t space = io.getSpace(); - while (space > (4U * DMR_RADIO_SYMBOL_LENGTH) && space <= TX_RINGBUFFER_SIZE) { + while (space > (4U * DMR_RADIO_SYMBOL_LENGTH)) { uint8_t c = m_poBuffer[m_poPtr]; uint8_t m = m_markBuffer[m_poPtr]; m_poPtr++; diff --git a/DStarTX.cpp b/DStarTX.cpp index c719e97..a319651 100644 --- a/DStarTX.cpp +++ b/DStarTX.cpp @@ -266,7 +266,7 @@ void CDStarTX::process() if (m_poLen > 0U) { uint16_t space = io.getSpace(); - while (space > (8U * DSTAR_RADIO_BIT_LENGTH) && space <= TX_RINGBUFFER_SIZE) { + while (space > (8U * DSTAR_RADIO_BIT_LENGTH)) { uint8_t c = m_poBuffer[m_poPtr++]; writeByte(c); diff --git a/SampleRB.cpp b/SampleRB.cpp index 6494a99..dd9154f 100644 --- a/SampleRB.cpp +++ b/SampleRB.cpp @@ -35,12 +35,19 @@ m_overflow(false) uint16_t CSampleRB::getSpace() const { + uint16_t n = 0U; + if (m_tail == m_head) - return m_full ? 0U : m_length; + n = m_full ? 0U : m_length; else if (m_tail < m_head) - return m_length - m_head + m_tail; + n = m_length - m_head + m_tail; else - return m_tail - m_head; + n = m_tail - m_head; + + if (n > m_length) + n = 0U; + + return n; } uint16_t CSampleRB::getData() const diff --git a/SerialRB.cpp b/SerialRB.cpp index ed11711..5f917d5 100644 --- a/SerialRB.cpp +++ b/SerialRB.cpp @@ -39,12 +39,19 @@ void CSerialRB::reset() uint16_t CSerialRB::getSpace() const { + uint16_t n = 0U; + if (m_tail == m_head) - return m_full ? 0U : m_length; + n = m_full ? 0U : m_length; else if (m_tail < m_head) - return m_length - m_head + m_tail; + n = m_length - m_head + m_tail; else - return m_tail - m_head; + n = m_tail - m_head; + + if (n > m_length) + n = 0U; + + return n; } uint16_t CSerialRB::getData() const diff --git a/YSFTX.cpp b/YSFTX.cpp index a45c8cf..92984a7 100644 --- a/YSFTX.cpp +++ b/YSFTX.cpp @@ -77,7 +77,7 @@ void CYSFTX::process() if (m_poLen > 0U) { uint16_t space = io.getSpace(); - while (space > (4U * YSF_RADIO_SYMBOL_LENGTH) && space <= TX_RINGBUFFER_SIZE) { + while (space > (4U * YSF_RADIO_SYMBOL_LENGTH)) { uint8_t c = m_poBuffer[m_poPtr++]; writeByte(c);