From 192e8e24356cdd247ca4ca11416a9df37a62603f Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 4 Jul 2020 13:04:24 +0200 Subject: [PATCH 1/6] Fix buffer underrun in FM --- SerialModem.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SerialModem.cpp b/SerialModem.cpp index 95f5765..25a4ed5 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -248,7 +248,7 @@ void CSerialModem::setSerialParams(const std::string& protocol, unsigned int add m_serial = new CI2CController(m_port, address); else #endif - m_serial = new CSerialController(m_port, speed, true); + m_serial = new CSerialController(m_port, speed, false); } void CSerialModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency) @@ -640,7 +640,7 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Data", m_buffer, m_length); - unsigned int data1 = m_length - m_offset + 1U; + unsigned int data1 = m_length - m_offset; m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); unsigned char data2 = TAG_DATA; @@ -654,11 +654,11 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Control", m_buffer, m_length); - unsigned char data = m_length - m_offset + 1U; - m_rxFMData.addData(&data, 1U); + unsigned int data1 = m_length - m_offset; + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); - data = TAG_HEADER; - m_rxFMData.addData(&data, 1U); + unsigned char data2 = TAG_DATA; + m_rxFMData.addData(&data2, 1U); m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); } @@ -668,7 +668,7 @@ void CSerialModem::clock(unsigned int ms) if(m_trace) CUtils::dump(1U, "RX FM End of transmission", m_buffer, m_length); - unsigned char data = m_length - m_offset + 1U; + unsigned char data = m_length - m_offset; m_rxFMData.addData(&data, 1U); data = TAG_EOT; From 183430593f085c643f0b168609914c74e45b8a68 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 4 Jul 2020 14:21:11 +0200 Subject: [PATCH 2/6] Revert "Fix buffer underrun in FM" This reverts commit 192e8e24356cdd247ca4ca11416a9df37a62603f. --- SerialModem.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SerialModem.cpp b/SerialModem.cpp index 25a4ed5..95f5765 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -248,7 +248,7 @@ void CSerialModem::setSerialParams(const std::string& protocol, unsigned int add m_serial = new CI2CController(m_port, address); else #endif - m_serial = new CSerialController(m_port, speed, false); + m_serial = new CSerialController(m_port, speed, true); } void CSerialModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency) @@ -640,7 +640,7 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Data", m_buffer, m_length); - unsigned int data1 = m_length - m_offset; + unsigned int data1 = m_length - m_offset + 1U; m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); unsigned char data2 = TAG_DATA; @@ -654,11 +654,11 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Control", m_buffer, m_length); - unsigned int data1 = m_length - m_offset; - m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); + unsigned char data = m_length - m_offset + 1U; + m_rxFMData.addData(&data, 1U); - unsigned char data2 = TAG_DATA; - m_rxFMData.addData(&data2, 1U); + data = TAG_HEADER; + m_rxFMData.addData(&data, 1U); m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); } @@ -668,7 +668,7 @@ void CSerialModem::clock(unsigned int ms) if(m_trace) CUtils::dump(1U, "RX FM End of transmission", m_buffer, m_length); - unsigned char data = m_length - m_offset; + unsigned char data = m_length - m_offset + 1U; m_rxFMData.addData(&data, 1U); data = TAG_EOT; From 41dc96affeb03ba6086f6f51571b4e0e3c311916 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 4 Jul 2020 13:04:24 +0200 Subject: [PATCH 3/6] Fix buffer underrun in FM --- SerialModem.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SerialModem.cpp b/SerialModem.cpp index 6cc873b..3d0cce9 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -248,7 +248,7 @@ void CSerialModem::setSerialParams(const std::string& protocol, unsigned int add m_serial = new CI2CController(m_port, address); else #endif - m_serial = new CSerialController(m_port, speed, true); + m_serial = new CSerialController(m_port, speed, false); } void CSerialModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency) @@ -640,7 +640,7 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Data", m_buffer, m_length); - unsigned int data1 = m_length - m_offset + 1U; + unsigned int data1 = m_length - m_offset; m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); unsigned char data2 = TAG_DATA; @@ -654,11 +654,11 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Control", m_buffer, m_length); - unsigned char data = m_length - m_offset + 1U; - m_rxFMData.addData(&data, 1U); + unsigned int data1 = m_length - m_offset; + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); - data = TAG_HEADER; - m_rxFMData.addData(&data, 1U); + unsigned char data2 = TAG_DATA; + m_rxFMData.addData(&data2, 1U); m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); } @@ -668,7 +668,7 @@ void CSerialModem::clock(unsigned int ms) if(m_trace) CUtils::dump(1U, "RX FM End of transmission", m_buffer, m_length); - unsigned char data = m_length - m_offset + 1U; + unsigned char data = m_length - m_offset; m_rxFMData.addData(&data, 1U); data = TAG_EOT; From 40a974d7cbf8b880900ca8f08f8c0c4b5a403d27 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Sat, 4 Jul 2020 14:21:11 +0200 Subject: [PATCH 4/6] Revert "Fix buffer underrun in FM" This reverts commit 192e8e24356cdd247ca4ca11416a9df37a62603f. --- SerialModem.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SerialModem.cpp b/SerialModem.cpp index 3d0cce9..6cc873b 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -248,7 +248,7 @@ void CSerialModem::setSerialParams(const std::string& protocol, unsigned int add m_serial = new CI2CController(m_port, address); else #endif - m_serial = new CSerialController(m_port, speed, false); + m_serial = new CSerialController(m_port, speed, true); } void CSerialModem::setRFParams(unsigned int rxFrequency, int rxOffset, unsigned int txFrequency, int txOffset, int txDCOffset, int rxDCOffset, float rfLevel, unsigned int pocsagFrequency) @@ -640,7 +640,7 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Data", m_buffer, m_length); - unsigned int data1 = m_length - m_offset; + unsigned int data1 = m_length - m_offset + 1U; m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); unsigned char data2 = TAG_DATA; @@ -654,11 +654,11 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Control", m_buffer, m_length); - unsigned int data1 = m_length - m_offset; - m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); + unsigned char data = m_length - m_offset + 1U; + m_rxFMData.addData(&data, 1U); - unsigned char data2 = TAG_DATA; - m_rxFMData.addData(&data2, 1U); + data = TAG_HEADER; + m_rxFMData.addData(&data, 1U); m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); } @@ -668,7 +668,7 @@ void CSerialModem::clock(unsigned int ms) if(m_trace) CUtils::dump(1U, "RX FM End of transmission", m_buffer, m_length); - unsigned char data = m_length - m_offset; + unsigned char data = m_length - m_offset + 1U; m_rxFMData.addData(&data, 1U); data = TAG_EOT; From 4d6f64a51eacc60c831051800cf2163313503f9b Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Mon, 6 Jul 2020 19:44:55 +0200 Subject: [PATCH 5/6] Write FM control length as integer, since we always read it as int --- SerialModem.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SerialModem.cpp b/SerialModem.cpp index 6cc873b..ef29423 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -654,11 +654,11 @@ void CSerialModem::clock(unsigned int ms) if (m_trace) CUtils::dump(1U, "RX FM Control", m_buffer, m_length); - unsigned char data = m_length - m_offset + 1U; - m_rxFMData.addData(&data, 1U); + unsigned int data1 = m_length - m_offset + 1U; + m_rxFMData.addData((unsigned char *)&data1, sizeof(unsigned int)); - data = TAG_HEADER; - m_rxFMData.addData(&data, 1U); + unsigned char data2= TAG_HEADER; + m_rxFMData.addData(&data2, 1U); m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); } From 009f50a9138f3f6e478d1e59c73380787009e620 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck Date: Mon, 6 Jul 2020 19:52:16 +0200 Subject: [PATCH 6/6] Write FM_EOT as uint --- SerialModem.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/SerialModem.cpp b/SerialModem.cpp index ef29423..5fe164b 100644 --- a/SerialModem.cpp +++ b/SerialModem.cpp @@ -655,7 +655,7 @@ void CSerialModem::clock(unsigned int ms) CUtils::dump(1U, "RX FM Control", m_buffer, m_length); unsigned int data1 = m_length - m_offset + 1U; - m_rxFMData.addData((unsigned char *)&data1, sizeof(unsigned int)); + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); unsigned char data2= TAG_HEADER; m_rxFMData.addData(&data2, 1U); @@ -668,11 +668,11 @@ void CSerialModem::clock(unsigned int ms) if(m_trace) CUtils::dump(1U, "RX FM End of transmission", m_buffer, m_length); - unsigned char data = m_length - m_offset + 1U; - m_rxFMData.addData(&data, 1U); + unsigned int data1 = m_length - m_offset + 1U; + m_rxFMData.addData((unsigned char*)&data1, sizeof(unsigned int)); - data = TAG_EOT; - m_rxFMData.addData(&data, 1U); + unsigned char data2 = TAG_EOT; + m_rxFMData.addData(&data2, 1U); m_rxFMData.addData(m_buffer + m_offset, m_length - m_offset); }