diff options
author | Vadim Yanitskiy <axilirator@gmail.com> | 2018-03-09 02:54:45 +0700 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-03-14 21:12:30 +0000 |
commit | 4d9b59c3efb269a6e2c9046ae3653f1c8fbdb3f6 (patch) | |
tree | e591b9424639da545f042b47dd0f25a1df9278ed /Transceiver52M/Transceiver.cpp | |
parent | bd0efb0bea27b63a7dd9003dc36e4388978499b6 (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/Transceiver.cpp')
-rw-r--r-- | Transceiver52M/Transceiver.cpp | 18 |
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); |