From 0ca15ac41fe7f33c2615ea43cdd0e5f833ab11b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Grome=C5=A1?= Date: Thu, 2 Aug 2018 14:50:20 +0200 Subject: [PATCH] RF69 - Fixed incorrect size of dynamically allocated array --- src/modules/RF69.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/modules/RF69.cpp b/src/modules/RF69.cpp index 59cfa8b0..bd47e981 100644 --- a/src/modules/RF69.cpp +++ b/src/modules/RF69.cpp @@ -84,6 +84,14 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe return(ERR_NONE); } +int16_t RF69::transmit(String& str, uint8_t addr) { + return(RF69::transmit(str.c_str())); +} + +int16_t RF69::transmit(const char* str, uint8_t addr) { + return(RF69::transmit((uint8_t*)str, strlen(str), addr)); +} + int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) { // check packet length if(len > 64) { @@ -125,12 +133,18 @@ int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) { return(ERR_NONE); } -int16_t RF69::transmit(const char* str, uint8_t addr) { - return(RF69::transmit((uint8_t*)str, strlen(str), addr)); -} - -int16_t RF69::transmit(String& str, uint8_t addr) { - return(RF69::transmit(str.c_str())); +int16_t RF69::receive(String& str, size_t len) { + // create temporary array to store received data + char* data = new char[len]; + int16_t state = RF69::receive((uint8_t*)data, len); + + // if packet was received successfully, copy data into String + if(state == ERR_NONE) { + str = String(data); + } + + delete[] data; + return(state); } int16_t RF69::receive(uint8_t* data, size_t len) { @@ -170,7 +184,7 @@ int16_t RF69::receive(uint8_t* data, size_t len) { // argument len equal to zero indicates String call, which means dynamically allocated data array // dispose of the original and create a new one delete[] data; - data = new uint8_t[length]; + data = new uint8_t[length + 1]; } _mod->SPIreadRegisterBurst(RF69_REG_FIFO, length, data); @@ -185,20 +199,6 @@ int16_t RF69::receive(uint8_t* data, size_t len) { return(ERR_NONE); } -int16_t RF69::receive(String& str, size_t len) { - // create temporary array to store received data - char* data = new char[len]; - int16_t state = RF69::receive((uint8_t*)data, len); - - // if packet was received successfully, copy data into String - if(state == ERR_NONE) { - str = String(data); - } - - delete[] data; - return(state); -} - int16_t RF69::sleep() { // set module to sleep return(setMode(RF69_SLEEP));