Skip to content

Commit b088bd4

Browse files
author
Cruz Monrreal
authored
Merge pull request #9759 from michalpasztamobica/memory_handling_fixes
Multiple memory handling fixes
2 parents 2910ed5 + fa6a3f5 commit b088bd4

File tree

10 files changed

+46
-3
lines changed

10 files changed

+46
-3
lines changed

UNITTESTS/features/netsocket/DTLSSocketWrapper/test_DTLSSocketWrapper.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class TestDTLSSocketWrapper : public testing::Test {
5858
stack.return_socketAddress = SocketAddress();
5959
eventFlagsStubNextRetval.clear();
6060
delete wrapper;
61+
delete transport;
6162
}
6263

6364
char *cert = "-----BEGIN CERTIFICATE-----\
@@ -103,6 +104,7 @@ TEST_F(TestDTLSSocketWrapper, constructor)
103104
TEST_F(TestDTLSSocketWrapper, constructor_hostname)
104105
{
105106
DTLSSocketWrapper *wrapper2 = new DTLSSocketWrapper(transport, "localhost");
107+
delete wrapper2;
106108
}
107109

108110
/* connect */
@@ -323,6 +325,8 @@ TEST_F(TestDTLSSocketWrapper, set_root_ca_cert_invalid)
323325
mbedtls_stub.counter = 0;
324326
mbedtls_stub.retArray[0] = 1; // mbedtls_x509_crt_parse error
325327
EXPECT_EQ(wrapper->set_root_ca_cert(cert, strlen(cert)), NSAPI_ERROR_PARAMETER);
328+
// We need to deallocate the crt pointer ourselves.
329+
delete (wrapper->get_ca_chain());
326330
}
327331

328332
TEST_F(TestDTLSSocketWrapper, set_client_cert_key)

UNITTESTS/features/netsocket/NetworkInterface/test_NetworkInterface.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,4 +216,6 @@ TEST_F(TestNetworkInterface, correct_event_listener_per_interface)
216216

217217
iface->remove_event_listener(my_iface_callback);
218218
iface2->remove_event_listener(my_iface_callback2);
219+
220+
delete iface2;
219221
}

UNITTESTS/features/netsocket/TCPSocket/test_TCPSocket.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,8 +272,12 @@ TEST_F(TestTCPSocket, accept)
272272
nsapi_error_t error;
273273
stack.return_value = NSAPI_ERROR_OK;
274274
socket->open((NetworkStack *)&stack);
275-
EXPECT_NE(socket->accept(&error), static_cast<TCPSocket *>(NULL));
275+
TCPSocket *sock = socket->accept(&error);
276+
EXPECT_NE(sock, static_cast<TCPSocket *>(NULL));
276277
EXPECT_EQ(error, NSAPI_ERROR_OK);
278+
if (sock) {
279+
sock->close();
280+
}
277281
}
278282

279283
TEST_F(TestTCPSocket, accept_would_block)

UNITTESTS/features/netsocket/TLSSocketWrapper/test_TLSSocketWrapper.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class TestTLSSocketWrapper : public testing::Test {
5656
stack.return_values.clear();
5757
eventFlagsStubNextRetval.clear();
5858
delete wrapper;
59+
delete transport;
5960
}
6061

6162
char *cert = "-----BEGIN CERTIFICATE-----\
@@ -101,6 +102,7 @@ TEST_F(TestTLSSocketWrapper, constructor)
101102
TEST_F(TestTLSSocketWrapper, constructor_hostname)
102103
{
103104
TLSSocketWrapper *wrapper2 = new TLSSocketWrapper(transport, "localhost");
105+
delete wrapper2;
104106
}
105107

106108
/* connect */

UNITTESTS/features/netsocket/WiFiAccessPoint/test_WiFiAccessPoint.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,6 @@ TEST_F(TestWiFiAccessPoint, set_data)
6262
EXPECT_EQ(testAp.channel, ap1->get_channel());
6363
EXPECT_EQ(testAp.rssi, ap1->get_rssi());
6464
EXPECT_EQ(testAp.security, ap1->get_security());
65+
delete ap1;
6566
}
6667

UNITTESTS/stubs/NetworkStack_stub.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ class NetworkStackstub : public NetworkStack {
2727
nsapi_error_t return_value;
2828
SocketAddress return_socketAddress;
2929

30-
NetworkStackstub()
30+
NetworkStackstub() :
31+
return_value(0),
32+
return_socketAddress()
3133
{
32-
return_value = 0;
3334
}
3435

3536
virtual const char *get_ip_address()
@@ -57,6 +58,8 @@ class NetworkStackstub : public NetworkStack {
5758
if (return_value == NSAPI_ERROR_OK && return_values.front() == NSAPI_ERROR_OK) {
5859
// Make sure a non-NULL value is returned if error is not expected
5960
*handle = reinterpret_cast<nsapi_socket_t *>(1234);
61+
} else {
62+
*handle = NULL;
6063
}
6164
return return_value;
6265
};
@@ -84,6 +87,12 @@ class NetworkStackstub : public NetworkStack {
8487
virtual nsapi_error_t socket_accept(nsapi_socket_t server,
8588
nsapi_socket_t *handle, SocketAddress *address = 0)
8689
{
90+
if (return_value == NSAPI_ERROR_OK && return_values.front() == NSAPI_ERROR_OK) {
91+
// Make sure a non-NULL value is returned if error is not expected
92+
*handle = reinterpret_cast<nsapi_socket_t *>(1234);
93+
} else {
94+
*handle = NULL;
95+
}
8796
return return_value;
8897
};
8998
virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle,

features/netsocket/InternetSocket.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ using namespace mbed;
2121

2222
InternetSocket::InternetSocket()
2323
: _stack(0), _socket(0), _timeout(osWaitForever),
24+
_remote_peer(),
2425
_readers(0), _writers(0),
2526
_factory_allocated(false)
2627
{

features/netsocket/SocketAddress.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,32 +26,43 @@
2626

2727
SocketAddress::SocketAddress(nsapi_addr_t addr, uint16_t port)
2828
{
29+
mem_init();
2930
_ip_address = NULL;
3031
set_addr(addr);
3132
set_port(port);
3233
}
3334

3435
SocketAddress::SocketAddress(const char *addr, uint16_t port)
3536
{
37+
mem_init();
3638
_ip_address = NULL;
3739
set_ip_address(addr);
3840
set_port(port);
3941
}
4042

4143
SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port)
4244
{
45+
mem_init();
4346
_ip_address = NULL;
4447
set_ip_bytes(bytes, version);
4548
set_port(port);
4649
}
4750

4851
SocketAddress::SocketAddress(const SocketAddress &addr)
4952
{
53+
mem_init();
5054
_ip_address = NULL;
5155
set_addr(addr.get_addr());
5256
set_port(addr.get_port());
5357
}
5458

59+
void SocketAddress::mem_init(void)
60+
{
61+
_addr.version = NSAPI_UNSPEC;
62+
memset(_addr.bytes, 0, NSAPI_IP_BYTES);
63+
_port = 0;
64+
}
65+
5566
bool SocketAddress::set_ip_address(const char *addr)
5667
{
5768
delete[] _ip_address;

features/netsocket/SocketAddress.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ class SocketAddress {
178178
private:
179179
void _SocketAddress(NetworkStack *iface, const char *host, uint16_t port);
180180

181+
/** Initialize memory */
182+
void mem_init(void);
183+
181184
mutable char *_ip_address;
182185
nsapi_addr_t _addr;
183186
uint16_t _port;

features/netsocket/TLSSocketWrapper.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ nsapi_error_t TLSSocketWrapper::set_root_ca_cert(const void *root_ca, size_t len
109109
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(root_ca),
110110
len)) != 0) {
111111
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
112+
mbedtls_x509_crt_free(crt);
113+
delete crt;
112114
return NSAPI_ERROR_PARAMETER;
113115
}
114116
set_ca_chain(crt);
@@ -140,12 +142,16 @@ nsapi_error_t TLSSocketWrapper::set_client_cert_key(const void *client_cert, siz
140142
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(client_cert),
141143
client_cert_len)) != 0) {
142144
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
145+
mbedtls_x509_crt_free(crt);
146+
delete crt;
143147
return NSAPI_ERROR_PARAMETER;
144148
}
145149
mbedtls_pk_init(&_pkctx);
146150
if ((ret = mbedtls_pk_parse_key(&_pkctx, static_cast<const unsigned char *>(client_private_key_pem),
147151
client_private_key_len, NULL, 0)) != 0) {
148152
print_mbedtls_error("mbedtls_pk_parse_key", ret);
153+
mbedtls_x509_crt_free(crt);
154+
delete crt;
149155
return NSAPI_ERROR_PARAMETER;
150156
}
151157
set_own_cert(crt);

0 commit comments

Comments
 (0)