From 3c1f05ecb4b171dd7a22766d7c760a667d24f41b Mon Sep 17 00:00:00 2001 From: Jean-Roland Date: Mon, 3 Feb 2025 10:55:08 +0100 Subject: [PATCH] fix: 0 size allocation --- src/collections/slice.c | 1 + src/protocol/definitions/transport.c | 4 +++- src/system/freertos_plus_tcp/system.c | 7 ++++++- src/system/rpi_pico/system.c | 7 ++++++- src/transport/unicast/transport.c | 6 +++--- 5 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/collections/slice.c b/src/collections/slice.c index 750c10f86..7ac9d551d 100644 --- a/src/collections/slice.c +++ b/src/collections/slice.c @@ -38,6 +38,7 @@ void _z_delete_context_delete(_z_delete_context_t *c, void *data) { /*-------- Slice --------*/ z_result_t _z_slice_init(_z_slice_t *bs, size_t capacity) { + assert(capacity != 0); bs->start = (uint8_t *)z_malloc(capacity); if (bs->start == NULL) { bs->len = 0; diff --git a/src/protocol/definitions/transport.c b/src/protocol/definitions/transport.c index 3cb0d57ae..b75c78b54 100644 --- a/src/protocol/definitions/transport.c +++ b/src/protocol/definitions/transport.c @@ -341,7 +341,9 @@ void _z_t_msg_copy_init(_z_t_msg_init_t *clone, _z_t_msg_init_t *msg) { void _z_t_msg_copy_open(_z_t_msg_open_t *clone, _z_t_msg_open_t *msg) { clone->_lease = msg->_lease; clone->_initial_sn = msg->_initial_sn; - _z_slice_copy(&clone->_cookie, &msg->_cookie); + if (!_z_slice_is_empty(&msg->_cookie)) { + _z_slice_copy(&clone->_cookie, &msg->_cookie); + } } void _z_t_msg_copy_close(_z_t_msg_close_t *clone, _z_t_msg_close_t *msg) { clone->_reason = msg->_reason; } diff --git a/src/system/freertos_plus_tcp/system.c b/src/system/freertos_plus_tcp/system.c index c1740843d..e00d79e0c 100644 --- a/src/system/freertos_plus_tcp/system.c +++ b/src/system/freertos_plus_tcp/system.c @@ -49,7 +49,12 @@ void z_random_fill(void *buf, size_t len) { } /*------------------ Memory ------------------*/ -void *z_malloc(size_t size) { return pvPortMalloc(size); } +void *z_malloc(size_t size) { + if (size == 0) { + return NULL; + } + return pvPortMalloc(size); +} void *z_realloc(void *ptr, size_t size) { _ZP_UNUSED(ptr); diff --git a/src/system/rpi_pico/system.c b/src/system/rpi_pico/system.c index 7969b65a3..c6a6ead24 100644 --- a/src/system/rpi_pico/system.c +++ b/src/system/rpi_pico/system.c @@ -41,7 +41,12 @@ void z_random_fill(void *buf, size_t len) { } /*------------------ Memory ------------------*/ -void *z_malloc(size_t size) { return pvPortMalloc(size); } +void *z_malloc(size_t size) { + if (size == 0) { + return NULL; + } + return pvPortMalloc(size); +} void *z_realloc(void *ptr, size_t size) { _ZP_UNUSED(ptr); diff --git a/src/transport/unicast/transport.c b/src/transport/unicast/transport.c index 53e316df9..1344414c2 100644 --- a/src/transport/unicast/transport.c +++ b/src/transport/unicast/transport.c @@ -151,7 +151,7 @@ static z_result_t _z_unicast_handshake_client(_z_transport_unicast_establish_par return ret; } // Try to receive response - _z_transport_message_t iam; + _z_transport_message_t iam = {0}; _Z_RETURN_IF_ERR(_z_link_recv_t_msg(&iam, zl)); if ((_Z_MID(iam._header) != _Z_MID_T_INIT) || !_Z_HAS_FLAG(iam._header, _Z_FLAG_T_INIT_A)) { _z_t_msg_clear(&iam); @@ -213,7 +213,7 @@ static z_result_t _z_unicast_handshake_client(_z_transport_unicast_establish_par return ret; } // Try to receive response - _z_transport_message_t oam; + _z_transport_message_t oam = {0}; _Z_RETURN_IF_ERR(_z_link_recv_t_msg(&oam, zl)); if ((_Z_MID(oam._header) != _Z_MID_T_OPEN) || !_Z_HAS_FLAG(oam._header, _Z_FLAG_T_OPEN_A)) { _z_t_msg_clear(&oam); @@ -234,7 +234,7 @@ static z_result_t _z_unicast_handshake_client(_z_transport_unicast_establish_par static z_result_t _z_unicast_handshake_listener(_z_transport_unicast_establish_param_t *param, const _z_link_t *zl, const _z_id_t *local_zid, enum z_whatami_t whatami) { // Read t message from link - _z_transport_message_t tmsg; + _z_transport_message_t tmsg = {0}; z_result_t ret = _z_link_recv_t_msg(&tmsg, zl); if (ret != _Z_RES_OK) { return ret;