FIX: Sanitizing adapters' byte count

This commit is contained in:
Rodrigo Alfonso
2025-02-07 06:23:23 -03:00
parent db815e4749
commit 97bb7ca405
3 changed files with 26 additions and 12 deletions

View File

@@ -103,6 +103,8 @@ class LinkRawWireless {
#else
static constexpr int CMD_TIMEOUT = 15;
#endif
static constexpr int MAX_TRANSFER_BYTES_SERVER = 87;
static constexpr int MAX_TRANSFER_BYTES_CLIENT = 16;
static constexpr int LOGIN_STEPS = 9;
static constexpr int COMMAND_HEADER_VALUE = 0x9966;
static constexpr int RESPONSE_ACK = 0x80;
@@ -865,11 +867,16 @@ class LinkRawWireless {
for (u32 i = 1; i < result.dataSize; i++)
response.data[i - 1] = result.data[i];
u32 header = result.data[0];
response.sentBytes[0] = header & 0b1111111;
response.sentBytes[1] = (header >> 8) & 0b11111;
response.sentBytes[2] = (header >> 13) & 0b11111;
response.sentBytes[3] = (header >> 18) & 0b11111;
response.sentBytes[4] = (header >> 23) & 0b11111;
response.sentBytes[0] =
Link::_min(header & 0b1111111, MAX_TRANSFER_BYTES_SERVER);
response.sentBytes[1] =
Link::_min((header >> 8) & 0b11111, MAX_TRANSFER_BYTES_CLIENT);
response.sentBytes[2] =
Link::_min((header >> 13) & 0b11111, MAX_TRANSFER_BYTES_CLIENT);
response.sentBytes[3] =
Link::_min((header >> 18) & 0b11111, MAX_TRANSFER_BYTES_CLIENT);
response.sentBytes[4] =
Link::_min((header >> 23) & 0b11111, MAX_TRANSFER_BYTES_CLIENT);
return true;
}

View File

@@ -1386,11 +1386,16 @@ class LinkWireless {
// parse ReceiveData header
u32 sentBytes[LINK_WIRELESS_MAX_PLAYERS] = {0, 0, 0, 0, 0};
u32 receiveDataHeader = result->data[0];
sentBytes[0] = receiveDataHeader & 0b1111111;
sentBytes[1] = (receiveDataHeader >> 8) & 0b11111;
sentBytes[2] = (receiveDataHeader >> 13) & 0b11111;
sentBytes[3] = (receiveDataHeader >> 18) & 0b11111;
sentBytes[4] = (receiveDataHeader >> 23) & 0b11111;
sentBytes[0] = Link::_min(receiveDataHeader & 0b1111111,
LinkRawWireless::MAX_TRANSFER_BYTES_SERVER);
sentBytes[1] = Link::_min((receiveDataHeader >> 8) & 0b11111,
LinkRawWireless::MAX_TRANSFER_BYTES_CLIENT);
sentBytes[2] = Link::_min((receiveDataHeader >> 13) & 0b11111,
LinkRawWireless::MAX_TRANSFER_BYTES_CLIENT);
sentBytes[3] = Link::_min((receiveDataHeader >> 18) & 0b11111,
LinkRawWireless::MAX_TRANSFER_BYTES_CLIENT);
sentBytes[4] = Link::_min((receiveDataHeader >> 23) & 0b11111,
LinkRawWireless::MAX_TRANSFER_BYTES_CLIENT);
bool isServer = linkRawWireless.getState() == State::SERVING;
u32 cursor = 1;

View File

@@ -30,8 +30,10 @@ class LinkWirelessOpenSDK {
public:
static constexpr int MAX_TRANSFER_WORDS = 23;
static constexpr int MAX_TRANSFER_BYTES_SERVER = 87;
static constexpr int MAX_TRANSFER_BYTES_CLIENT = 16;
static constexpr int MAX_TRANSFER_BYTES_SERVER =
LinkRawWireless::MAX_TRANSFER_BYTES_SERVER;
static constexpr int MAX_TRANSFER_BYTES_CLIENT =
LinkRawWireless::MAX_TRANSFER_BYTES_CLIENT;
static constexpr int HEADER_SIZE_SERVER = 3;
static constexpr int HEADER_SIZE_CLIENT = 2;
static constexpr int HEADER_MASK_SERVER = 0b1111111111111111111111;