From 74d02a2a344f96df739016ddbcccf8324f6196bf Mon Sep 17 00:00:00 2001 From: Rodrigo Alfonso Date: Thu, 1 Feb 2024 06:43:38 -0300 Subject: [PATCH] Adding bounds check to getChildrenData and fixing other bugs --- lib/LinkWirelessMultiboot.hpp | 4 ++-- lib/LinkWirelessOpenSDK.hpp | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/LinkWirelessMultiboot.hpp b/lib/LinkWirelessMultiboot.hpp index 112bb71..6ce8ebd 100644 --- a/lib/LinkWirelessMultiboot.hpp +++ b/lib/LinkWirelessMultiboot.hpp @@ -204,6 +204,7 @@ class LinkWirelessMultiboot { if (header.isACK == 1 && header.n == 1 && header.phase == 0 && header.slotState == 1) { hasData = true; + // TODO: LOG CHILDRENDATA AND DEBUG WITH LONGER DISTANCES break; } } @@ -224,8 +225,6 @@ class LinkWirelessMultiboot { LWMLOG("SendData failed!"); return FAILURE; } - if (response.dataSize == 0) - continue; childrenData = linkWirelessOpenSDK->getChildrenData(response); for (u32 i = 0; i < childrenData.responses[0].packetsSize; i++) { @@ -244,6 +243,7 @@ class LinkWirelessMultiboot { progress = newProgress; LWMLOG("-> " + std::to_string(transferredBytes * 100 / romSize)); } + break; } } } diff --git a/lib/LinkWirelessOpenSDK.hpp b/lib/LinkWirelessOpenSDK.hpp index 354eda0..b877d8f 100644 --- a/lib/LinkWirelessOpenSDK.hpp +++ b/lib/LinkWirelessOpenSDK.hpp @@ -97,10 +97,14 @@ class LinkWirelessOpenSDK { ChildrenData getChildrenData(LinkRawWireless::ReceiveDataResponse response) { u8* buffer = (u8*)response.data; - u32 cursor = 0; ChildrenData childrenData; + if (response.sentBytes[1] + response.sentBytes[2] + response.sentBytes[3] + + response.sentBytes[4] > + response.dataSize * 4) + return childrenData; + for (u32 i = 1; i < LINK_RAW_WIRELESS_MAX_PLAYERS; i++) { ClientResponse* clientResponse = &childrenData.responses[i - 1]; u32 remainingBytes = response.sentBytes[i];