fix length handling when dealing with std::string length;

2.0-maint
Bryan Biedenkapp 3 years ago
parent 25af077323
commit 856f802b69

@ -1187,16 +1187,16 @@ void RemoteControl::writeResponse(std::string reply, sockaddr_storage address, u
if (m_debug)
LogDebug(LOG_RCON, "RemoteControl::writeResponse() block = %u, block len = %u, offs = %u", i, len, offs);
std::string str = reply.substr(offs, RC_BUFFER_LENGTH - 2U);
std::string str = reply.substr(offs, RC_BUFFER_LENGTH - 3U);
::memset(buffer + 2U, 0x00U, str.length());
::memcpy(buffer + 2U, str.c_str(), str.length());
::memcpy(buffer + 2U, str.c_str(), str.length() + 1U);
if (len - RC_BUFFER_LENGTH == 0U) {
buffer[str.length() + 1U] = END_OF_TEXT;
buffer[str.length() + 2U] = END_OF_TEXT;
}
else {
buffer[str.length() + 1U] = END_OF_BLOCK;
buffer[str.length() + 2U] = END_OF_BLOCK;
}
if (m_debug)
@ -1215,26 +1215,25 @@ void RemoteControl::writeResponse(std::string reply, sockaddr_storage address, u
if (len > 0U) {
std::string str = reply.substr(offs, std::string::npos);
str += " "; // pad
::memset(buffer + 2U, 0x00U, RC_BUFFER_LENGTH - 2U);
::memcpy(buffer + 2U, str.c_str(), str.length());
::memset(buffer + 2U, 0x00U, RC_BUFFER_LENGTH - 3U);
::memcpy(buffer + 2U, str.c_str(), str.length() + 1U);
buffer[str.length() + 1U] = END_OF_TEXT;
buffer[str.length() + 2U] = END_OF_TEXT;
if (m_debug)
Utils::dump(1U, "RCON (Multiblock) Sent", (uint8_t*)buffer, str.length() + 3U);
Utils::dump(1U, "RCON (Multiblock) Sent", (uint8_t*)buffer, str.length() + 4U);
m_socket.write(buffer, str.length() + 3U, address, addrLen);
m_socket.write(buffer, str.length() + 4U, address, addrLen);
}
}
else {
::memcpy(buffer + 2U, reply.c_str(), reply.length());
buffer[reply.length() + 1U] = END_OF_TEXT;
::memcpy(buffer + 2U, reply.c_str(), reply.length() + 1U);
buffer[reply.length() + 2U] = END_OF_TEXT;
if (m_debug) {
LogDebug(LOG_RCON, "RemoteControl::writeResponse() single block len = %u", reply.length() + 3U);
Utils::dump(1U, "RCON Sent", (uint8_t*)buffer, reply.length() + 3U);
LogDebug(LOG_RCON, "RemoteControl::writeResponse() single block len = %u", reply.length() + 4U);
Utils::dump(1U, "RCON Sent", (uint8_t*)buffer, reply.length() + 4U);
}
m_socket.write(buffer, reply.length() + 3U, address, addrLen);

Loading…
Cancel
Save

Powered by TurnKey Linux.