Skip to content

Commit 4f04358

Browse files
authored
Merge pull request #1 from bcmi-labs/hotfix/memoryleak
Fixed memory leak in CborArray, fixed ssize_t, #define CBOR_INT_T int
2 parents fccc594 + 4f31436 commit 4f04358

File tree

4 files changed

+13
-4
lines changed

4 files changed

+13
-4
lines changed

ArduinoCloudThing.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void ArduinoCloudThing::begin() {
4949

5050
int ArduinoCloudThing::publish(CborArray& object, uint8_t* data) {
5151

52-
size_t size = object.encode(data, sizeof(data));
52+
ssize_t size = object.encode(data, sizeof(data));
5353

5454
#ifdef TESTING_PROTOCOL
5555
decode(data, size);

lib/ArduinoCbor/src/ArduinoCbor.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "cn-cbor/cn-cbor.h"
77

88
#ifndef CBOR_INT_T
9-
#define CBOR_INT_T long
9+
#define CBOR_INT_T int
1010
#endif
1111

1212
class CborArray;

lib/ArduinoCbor/src/CborArray.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ CborArray::CborArray(CborBuffer& buffer, cn_cbor* raw) : buffer(buffer) {
1313
}
1414
}
1515

16+
CborArray::~CborArray() {
17+
//Fixed memory leak
18+
if (!raw->parent) {
19+
cn_cbor_free(this->raw, &buffer.context);
20+
}
21+
22+
}
23+
1624
CborVariant CborArray::get(int index) {
1725
return CborVariant(buffer, cn_cbor_index(raw, index));
1826
}
@@ -31,6 +39,6 @@ void CborArray::add(CBOR_INT_T value) {
3139
add(CborVariant(buffer, value));
3240
}
3341

34-
size_t CborArray::encode(uint8_t* data, size_t size) {
42+
ssize_t CborArray::encode(uint8_t* data, size_t size) {
3543
return cn_cbor_encoder_write(data, 0, size, raw);
3644
}

lib/ArduinoCbor/src/CborArray.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ class CborArray {
88

99
public:
1010
CborArray(CborBuffer& buffer, cn_cbor* raw=0);
11+
~CborArray();
1112

1213
CborVariant get(int index);
1314

1415
void add(CborVariant value);
1516
void add(const char* value);
1617
void add(CBOR_INT_T value);
1718

18-
size_t encode(uint8_t* data, size_t size);
19+
ssize_t encode(uint8_t* data, size_t size);
1920

2021
protected:
2122
CborBuffer& buffer;

0 commit comments

Comments
 (0)