From db7b6aaf3571679b20ca6fe7289b04a8e2c29283 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 23 May 2026 11:49:49 +0000 Subject: [PATCH 1/6] Initial plan From 6755336f57b1fab6e70f7787fe054ae89ebe3a9b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 23 May 2026 11:51:53 +0000 Subject: [PATCH 2/6] Handle addrList allocation failures safely --- RF24Mesh.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index 44f2901..d006a47 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -44,8 +44,11 @@ bool ESBMesh::begin(uint8_t channel, rf24_datarate_e data_ra else { #if !defined(MESH_NOMASTER) if (!addrMemAllocated) { - addrMemAllocated = true; addrList = (addrListStruct*)malloc((MESH_MEM_ALLOC_SIZE * sizeof(addrListStruct))); + if (!addrList) { + return false; + } + addrMemAllocated = true; addrListTop = 0; loadDHCP(); } @@ -501,7 +504,15 @@ void ESBMesh::setAddress(uint8_t nodeID, uint16_t address, b } if (addrListTop > 0 && addrListTop % MESH_MEM_ALLOC_SIZE == 0) { - addrList = (addrListStruct*)realloc(addrList, (addrListTop + MESH_MEM_ALLOC_SIZE) * sizeof(addrListStruct)); + addrListStruct* newList = + (addrListStruct*)realloc(addrList, (addrListTop + MESH_MEM_ALLOC_SIZE) * sizeof(addrListStruct)); + if (!newList) { + return; + } + addrList = newList; + } + if (!addrList) { + return; } addrList[addrListTop].address = address; addrList[addrListTop++].nodeID = nodeID; //Set the value AND increment Top without another line of code From 67f0e6fbd85343efb1cd52b8824dd9582a0fb9bb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 23 May 2026 12:02:06 +0000 Subject: [PATCH 3/6] Apply clang-format to allocation handling changes --- RF24Mesh.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index d006a47..5f21b01 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -504,8 +504,7 @@ void ESBMesh::setAddress(uint8_t nodeID, uint16_t address, b } if (addrListTop > 0 && addrListTop % MESH_MEM_ALLOC_SIZE == 0) { - addrListStruct* newList = - (addrListStruct*)realloc(addrList, (addrListTop + MESH_MEM_ALLOC_SIZE) * sizeof(addrListStruct)); + addrListStruct* newList = (addrListStruct*)realloc(addrList, (addrListTop + MESH_MEM_ALLOC_SIZE) * sizeof(addrListStruct)); if (!newList) { return; } From 2e89475d73e4dd52d802b4846819088bda376052 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:28:11 +0000 Subject: [PATCH 4/6] Align allocation checks with master setNodeID flow --- RF24Mesh.cpp | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index 5f21b01..5aef2b2 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -16,7 +16,8 @@ ESBMesh::ESBMesh(radio_t& _radio, network_t& _network) : rad setCallback(NULL); meshStarted = false; #if !defined(MESH_NOMASTER) - addrMemAllocated = false; + addrList = nullptr; + addrListTop = 0; #endif } @@ -42,17 +43,6 @@ bool ESBMesh::begin(uint8_t channel, rf24_datarate_e data_ra } } else { -#if !defined(MESH_NOMASTER) - if (!addrMemAllocated) { - addrList = (addrListStruct*)malloc((MESH_MEM_ALLOC_SIZE * sizeof(addrListStruct))); - if (!addrList) { - return false; - } - addrMemAllocated = true; - addrListTop = 0; - loadDHCP(); - } -#endif mesh_address = 0; network.begin(mesh_address); } @@ -459,6 +449,15 @@ template void ESBMesh::setNodeID(uint8_t nodeID) { _nodeID = nodeID; +#if !defined(MESH_NOMASTER) + if (!nodeID && addrList == nullptr) { + addrList = (addrListStruct*)malloc((MESH_MEM_ALLOC_SIZE * sizeof(addrListStruct))); + if (!addrList) { + return; + } + loadDHCP(); + } +#endif } /*****************************************************/ From 6c7617573e7bae84944446dbdbc030d65dfcee1e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:29:15 +0000 Subject: [PATCH 5/6] Clarify master nodeID check in setNodeID --- RF24Mesh.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index 5aef2b2..d9491dc 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -450,7 +450,7 @@ void ESBMesh::setNodeID(uint8_t nodeID) { _nodeID = nodeID; #if !defined(MESH_NOMASTER) - if (!nodeID && addrList == nullptr) { + if (nodeID == 0 && addrList == nullptr) { addrList = (addrListStruct*)malloc((MESH_MEM_ALLOC_SIZE * sizeof(addrListStruct))); if (!addrList) { return; From e9b003373c112e232e829fb7e13e4cd7c80a4961 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 3 Jun 2026 13:30:15 +0000 Subject: [PATCH 6/6] Initialize addrListTop on master addrList allocation --- RF24Mesh.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/RF24Mesh.cpp b/RF24Mesh.cpp index d9491dc..32e9f28 100644 --- a/RF24Mesh.cpp +++ b/RF24Mesh.cpp @@ -455,6 +455,7 @@ void ESBMesh::setNodeID(uint8_t nodeID) if (!addrList) { return; } + addrListTop = 0; loadDHCP(); } #endif