RF69 - Fixed memory leak in receive method

This commit is contained in:
Jan Gromeš 2018-07-13 10:36:14 +02:00
parent 10af5043af
commit e7ec53be3b

View file

@ -145,8 +145,19 @@ uint8_t RF69::receive(uint8_t* data, size_t len) {
size_t length = _mod->SPIreadRegister(RF69_REG_FIFO); size_t length = _mod->SPIreadRegister(RF69_REG_FIFO);
// read packet data // read packet data
if(len == 0) {
// 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];
}
_mod->SPIreadRegisterBurst(RF69_REG_FIFO, length, data); _mod->SPIreadRegisterBurst(RF69_REG_FIFO, length, data);
// add terminating null
if(len == 0) {
data[length] = 0;
}
// clear interrupt flags // clear interrupt flags
clearIRQFlags(); clearIRQFlags();
@ -155,12 +166,11 @@ uint8_t RF69::receive(uint8_t* data, size_t len) {
uint8_t RF69::receive(String& str, size_t len) { uint8_t RF69::receive(String& str, size_t len) {
// create temporary array to store received data // create temporary array to store received data
char* data = new char[0]; char* data = new char[len];
uint8_t state = RF69::receive((uint8_t*)data, len); uint8_t state = RF69::receive((uint8_t*)data, len);
// if packet was received successfully, copy data into String // if packet was received successfully, copy data into String
if(state == ERR_NONE) { if(state == ERR_NONE) {
data[strlen(data) - 1] = 0;
str = String(data); str = String(data);
} }