mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #9759 from michalpasztamobica/memory_handling_fixes
Multiple memory handling fixespull/9781/head
commit
b088bd493a
|
@ -58,6 +58,7 @@ protected:
|
||||||
stack.return_socketAddress = SocketAddress();
|
stack.return_socketAddress = SocketAddress();
|
||||||
eventFlagsStubNextRetval.clear();
|
eventFlagsStubNextRetval.clear();
|
||||||
delete wrapper;
|
delete wrapper;
|
||||||
|
delete transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *cert = "-----BEGIN CERTIFICATE-----\
|
char *cert = "-----BEGIN CERTIFICATE-----\
|
||||||
|
@ -103,6 +104,7 @@ TEST_F(TestDTLSSocketWrapper, constructor)
|
||||||
TEST_F(TestDTLSSocketWrapper, constructor_hostname)
|
TEST_F(TestDTLSSocketWrapper, constructor_hostname)
|
||||||
{
|
{
|
||||||
DTLSSocketWrapper *wrapper2 = new DTLSSocketWrapper(transport, "localhost");
|
DTLSSocketWrapper *wrapper2 = new DTLSSocketWrapper(transport, "localhost");
|
||||||
|
delete wrapper2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* connect */
|
/* connect */
|
||||||
|
@ -323,6 +325,8 @@ TEST_F(TestDTLSSocketWrapper, set_root_ca_cert_invalid)
|
||||||
mbedtls_stub.counter = 0;
|
mbedtls_stub.counter = 0;
|
||||||
mbedtls_stub.retArray[0] = 1; // mbedtls_x509_crt_parse error
|
mbedtls_stub.retArray[0] = 1; // mbedtls_x509_crt_parse error
|
||||||
EXPECT_EQ(wrapper->set_root_ca_cert(cert, strlen(cert)), NSAPI_ERROR_PARAMETER);
|
EXPECT_EQ(wrapper->set_root_ca_cert(cert, strlen(cert)), NSAPI_ERROR_PARAMETER);
|
||||||
|
// We need to deallocate the crt pointer ourselves.
|
||||||
|
delete (wrapper->get_ca_chain());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestDTLSSocketWrapper, set_client_cert_key)
|
TEST_F(TestDTLSSocketWrapper, set_client_cert_key)
|
||||||
|
|
|
@ -216,4 +216,6 @@ TEST_F(TestNetworkInterface, correct_event_listener_per_interface)
|
||||||
|
|
||||||
iface->remove_event_listener(my_iface_callback);
|
iface->remove_event_listener(my_iface_callback);
|
||||||
iface2->remove_event_listener(my_iface_callback2);
|
iface2->remove_event_listener(my_iface_callback2);
|
||||||
|
|
||||||
|
delete iface2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -272,8 +272,12 @@ TEST_F(TestTCPSocket, accept)
|
||||||
nsapi_error_t error;
|
nsapi_error_t error;
|
||||||
stack.return_value = NSAPI_ERROR_OK;
|
stack.return_value = NSAPI_ERROR_OK;
|
||||||
socket->open((NetworkStack *)&stack);
|
socket->open((NetworkStack *)&stack);
|
||||||
EXPECT_NE(socket->accept(&error), static_cast<TCPSocket *>(NULL));
|
TCPSocket *sock = socket->accept(&error);
|
||||||
|
EXPECT_NE(sock, static_cast<TCPSocket *>(NULL));
|
||||||
EXPECT_EQ(error, NSAPI_ERROR_OK);
|
EXPECT_EQ(error, NSAPI_ERROR_OK);
|
||||||
|
if (sock) {
|
||||||
|
sock->close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(TestTCPSocket, accept_would_block)
|
TEST_F(TestTCPSocket, accept_would_block)
|
||||||
|
|
|
@ -56,6 +56,7 @@ protected:
|
||||||
stack.return_values.clear();
|
stack.return_values.clear();
|
||||||
eventFlagsStubNextRetval.clear();
|
eventFlagsStubNextRetval.clear();
|
||||||
delete wrapper;
|
delete wrapper;
|
||||||
|
delete transport;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *cert = "-----BEGIN CERTIFICATE-----\
|
char *cert = "-----BEGIN CERTIFICATE-----\
|
||||||
|
@ -101,6 +102,7 @@ TEST_F(TestTLSSocketWrapper, constructor)
|
||||||
TEST_F(TestTLSSocketWrapper, constructor_hostname)
|
TEST_F(TestTLSSocketWrapper, constructor_hostname)
|
||||||
{
|
{
|
||||||
TLSSocketWrapper *wrapper2 = new TLSSocketWrapper(transport, "localhost");
|
TLSSocketWrapper *wrapper2 = new TLSSocketWrapper(transport, "localhost");
|
||||||
|
delete wrapper2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* connect */
|
/* connect */
|
||||||
|
|
|
@ -62,5 +62,6 @@ TEST_F(TestWiFiAccessPoint, set_data)
|
||||||
EXPECT_EQ(testAp.channel, ap1->get_channel());
|
EXPECT_EQ(testAp.channel, ap1->get_channel());
|
||||||
EXPECT_EQ(testAp.rssi, ap1->get_rssi());
|
EXPECT_EQ(testAp.rssi, ap1->get_rssi());
|
||||||
EXPECT_EQ(testAp.security, ap1->get_security());
|
EXPECT_EQ(testAp.security, ap1->get_security());
|
||||||
|
delete ap1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,9 +27,10 @@ public:
|
||||||
nsapi_error_t return_value;
|
nsapi_error_t return_value;
|
||||||
SocketAddress return_socketAddress;
|
SocketAddress return_socketAddress;
|
||||||
|
|
||||||
NetworkStackstub()
|
NetworkStackstub() :
|
||||||
|
return_value(0),
|
||||||
|
return_socketAddress()
|
||||||
{
|
{
|
||||||
return_value = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual const char *get_ip_address()
|
virtual const char *get_ip_address()
|
||||||
|
@ -57,6 +58,8 @@ protected:
|
||||||
if (return_value == NSAPI_ERROR_OK && return_values.front() == NSAPI_ERROR_OK) {
|
if (return_value == NSAPI_ERROR_OK && return_values.front() == NSAPI_ERROR_OK) {
|
||||||
// Make sure a non-NULL value is returned if error is not expected
|
// Make sure a non-NULL value is returned if error is not expected
|
||||||
*handle = reinterpret_cast<nsapi_socket_t *>(1234);
|
*handle = reinterpret_cast<nsapi_socket_t *>(1234);
|
||||||
|
} else {
|
||||||
|
*handle = NULL;
|
||||||
}
|
}
|
||||||
return return_value;
|
return return_value;
|
||||||
};
|
};
|
||||||
|
@ -84,6 +87,12 @@ protected:
|
||||||
virtual nsapi_error_t socket_accept(nsapi_socket_t server,
|
virtual nsapi_error_t socket_accept(nsapi_socket_t server,
|
||||||
nsapi_socket_t *handle, SocketAddress *address = 0)
|
nsapi_socket_t *handle, SocketAddress *address = 0)
|
||||||
{
|
{
|
||||||
|
if (return_value == NSAPI_ERROR_OK && return_values.front() == NSAPI_ERROR_OK) {
|
||||||
|
// Make sure a non-NULL value is returned if error is not expected
|
||||||
|
*handle = reinterpret_cast<nsapi_socket_t *>(1234);
|
||||||
|
} else {
|
||||||
|
*handle = NULL;
|
||||||
|
}
|
||||||
return return_value;
|
return return_value;
|
||||||
};
|
};
|
||||||
virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle,
|
virtual nsapi_size_or_error_t socket_send(nsapi_socket_t handle,
|
||||||
|
|
|
@ -21,6 +21,7 @@ using namespace mbed;
|
||||||
|
|
||||||
InternetSocket::InternetSocket()
|
InternetSocket::InternetSocket()
|
||||||
: _stack(0), _socket(0), _timeout(osWaitForever),
|
: _stack(0), _socket(0), _timeout(osWaitForever),
|
||||||
|
_remote_peer(),
|
||||||
_readers(0), _writers(0),
|
_readers(0), _writers(0),
|
||||||
_factory_allocated(false)
|
_factory_allocated(false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
SocketAddress::SocketAddress(nsapi_addr_t addr, uint16_t port)
|
SocketAddress::SocketAddress(nsapi_addr_t addr, uint16_t port)
|
||||||
{
|
{
|
||||||
|
mem_init();
|
||||||
_ip_address = NULL;
|
_ip_address = NULL;
|
||||||
set_addr(addr);
|
set_addr(addr);
|
||||||
set_port(port);
|
set_port(port);
|
||||||
|
@ -33,6 +34,7 @@ SocketAddress::SocketAddress(nsapi_addr_t addr, uint16_t port)
|
||||||
|
|
||||||
SocketAddress::SocketAddress(const char *addr, uint16_t port)
|
SocketAddress::SocketAddress(const char *addr, uint16_t port)
|
||||||
{
|
{
|
||||||
|
mem_init();
|
||||||
_ip_address = NULL;
|
_ip_address = NULL;
|
||||||
set_ip_address(addr);
|
set_ip_address(addr);
|
||||||
set_port(port);
|
set_port(port);
|
||||||
|
@ -40,6 +42,7 @@ SocketAddress::SocketAddress(const char *addr, uint16_t port)
|
||||||
|
|
||||||
SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port)
|
SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_t port)
|
||||||
{
|
{
|
||||||
|
mem_init();
|
||||||
_ip_address = NULL;
|
_ip_address = NULL;
|
||||||
set_ip_bytes(bytes, version);
|
set_ip_bytes(bytes, version);
|
||||||
set_port(port);
|
set_port(port);
|
||||||
|
@ -47,11 +50,19 @@ SocketAddress::SocketAddress(const void *bytes, nsapi_version_t version, uint16_
|
||||||
|
|
||||||
SocketAddress::SocketAddress(const SocketAddress &addr)
|
SocketAddress::SocketAddress(const SocketAddress &addr)
|
||||||
{
|
{
|
||||||
|
mem_init();
|
||||||
_ip_address = NULL;
|
_ip_address = NULL;
|
||||||
set_addr(addr.get_addr());
|
set_addr(addr.get_addr());
|
||||||
set_port(addr.get_port());
|
set_port(addr.get_port());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SocketAddress::mem_init(void)
|
||||||
|
{
|
||||||
|
_addr.version = NSAPI_UNSPEC;
|
||||||
|
memset(_addr.bytes, 0, NSAPI_IP_BYTES);
|
||||||
|
_port = 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool SocketAddress::set_ip_address(const char *addr)
|
bool SocketAddress::set_ip_address(const char *addr)
|
||||||
{
|
{
|
||||||
delete[] _ip_address;
|
delete[] _ip_address;
|
||||||
|
|
|
@ -178,6 +178,9 @@ public:
|
||||||
private:
|
private:
|
||||||
void _SocketAddress(NetworkStack *iface, const char *host, uint16_t port);
|
void _SocketAddress(NetworkStack *iface, const char *host, uint16_t port);
|
||||||
|
|
||||||
|
/** Initialize memory */
|
||||||
|
void mem_init(void);
|
||||||
|
|
||||||
mutable char *_ip_address;
|
mutable char *_ip_address;
|
||||||
nsapi_addr_t _addr;
|
nsapi_addr_t _addr;
|
||||||
uint16_t _port;
|
uint16_t _port;
|
||||||
|
|
|
@ -109,6 +109,8 @@ nsapi_error_t TLSSocketWrapper::set_root_ca_cert(const void *root_ca, size_t len
|
||||||
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(root_ca),
|
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(root_ca),
|
||||||
len)) != 0) {
|
len)) != 0) {
|
||||||
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
|
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
|
||||||
|
mbedtls_x509_crt_free(crt);
|
||||||
|
delete crt;
|
||||||
return NSAPI_ERROR_PARAMETER;
|
return NSAPI_ERROR_PARAMETER;
|
||||||
}
|
}
|
||||||
set_ca_chain(crt);
|
set_ca_chain(crt);
|
||||||
|
@ -140,12 +142,16 @@ nsapi_error_t TLSSocketWrapper::set_client_cert_key(const void *client_cert, siz
|
||||||
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(client_cert),
|
if ((ret = mbedtls_x509_crt_parse(crt, static_cast<const unsigned char *>(client_cert),
|
||||||
client_cert_len)) != 0) {
|
client_cert_len)) != 0) {
|
||||||
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
|
print_mbedtls_error("mbedtls_x509_crt_parse", ret);
|
||||||
|
mbedtls_x509_crt_free(crt);
|
||||||
|
delete crt;
|
||||||
return NSAPI_ERROR_PARAMETER;
|
return NSAPI_ERROR_PARAMETER;
|
||||||
}
|
}
|
||||||
mbedtls_pk_init(&_pkctx);
|
mbedtls_pk_init(&_pkctx);
|
||||||
if ((ret = mbedtls_pk_parse_key(&_pkctx, static_cast<const unsigned char *>(client_private_key_pem),
|
if ((ret = mbedtls_pk_parse_key(&_pkctx, static_cast<const unsigned char *>(client_private_key_pem),
|
||||||
client_private_key_len, NULL, 0)) != 0) {
|
client_private_key_len, NULL, 0)) != 0) {
|
||||||
print_mbedtls_error("mbedtls_pk_parse_key", ret);
|
print_mbedtls_error("mbedtls_pk_parse_key", ret);
|
||||||
|
mbedtls_x509_crt_free(crt);
|
||||||
|
delete crt;
|
||||||
return NSAPI_ERROR_PARAMETER;
|
return NSAPI_ERROR_PARAMETER;
|
||||||
}
|
}
|
||||||
set_own_cert(crt);
|
set_own_cert(crt);
|
||||||
|
|
Loading…
Reference in New Issue