aboutsummaryrefslogtreecommitdiffstats
path: root/Transceiver52M
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2018-03-09 02:54:45 +0700
committerHarald Welte <laforge@gnumonks.org>2018-03-14 21:12:30 +0000
commit4d9b59c3efb269a6e2c9046ae3653f1c8fbdb3f6 (patch)
treee591b9424639da545f042b47dd0f25a1df9278ed /Transceiver52M
parentbd0efb0bea27b63a7dd9003dc36e4388978499b6 (diff)
Transceiver.cpp: properly zero-terminate received commands
Previously it was assumed that a sender should zero-terminate each command being sent. Otherwise, this could cause to printing garbage. Let's do this manually, using the length of received data as a position for '\0'. Change-Id: I69f413f33156c38a853efc5a8cdc66fbfb0ca6af
Diffstat (limited to 'Transceiver52M')
-rw-r--r--Transceiver52M/Transceiver.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/Transceiver52M/Transceiver.cpp b/Transceiver52M/Transceiver.cpp
index 7dc4c1c..8f41c5e 100644
--- a/Transceiver52M/Transceiver.cpp
+++ b/Transceiver52M/Transceiver.cpp
@@ -661,20 +661,20 @@ void Transceiver::reset()
void Transceiver::driveControl(size_t chan)
{
- // check control socket
- char buffer[MAX_PACKET_LENGTH];
- int msgLen = -1;
- buffer[0] = '\0';
+ char buffer[MAX_PACKET_LENGTH + 1];
+ char response[MAX_PACKET_LENGTH + 1];
+ int msgLen;
- msgLen = mCtrlSockets[chan]->read(buffer, sizeof(buffer));
-
- if (msgLen < 1) {
+ /* Attempt to read from control socket */
+ msgLen = mCtrlSockets[chan]->read(buffer, MAX_PACKET_LENGTH);
+ if (msgLen < 1)
return;
- }
+
+ /* Zero-terminate received string */
+ buffer[msgLen] = '\0';
char cmdcheck[4];
char command[MAX_PACKET_LENGTH];
- char response[MAX_PACKET_LENGTH];
sscanf(buffer,"%3s %s",cmdcheck,command);