Files
buildroot/package/libzenoh-pico/0002-fix-compilation-issues.patch
Thomas Perale ec12da7384 package/libzenoh-pico: fix build w/ RUNTIME_DEBUG
On the autobuilder the following build error would appear for the
libzenoh-pico package when the option BR2_ENABLE_RUNTIME_DEBUG is
enabled:

```
[  1%] Building C object CMakeFiles/zenohpico_shared.dir/src/api/encoding.c.o
In function '_z_encoding_convert_into_string',
    inlined from 'z_encoding_to_string' at /workdir/instance-0/output-1/build/libzenoh-pico-1.2.1/src/api/encoding.c:261:5:
/workdir/instance-0/output-1/build/libzenoh-pico-1.2.1/src/api/encoding.c:203:15: error: 'strncat' output truncated before terminating nul copying 1 byte from a string of the same length [-Werror=stringop-truncation]
  203 |         (void)strncat(value, &sep, 1);
      |               ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
```

This error can be reproduced with:

```
cat >.config <<EOF
BR2_aarch64=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_PACKAGE_LIBZENOH_PICO=y
BR2_ENABLE_RUNTIME_DEBUG=y
EOF
make olddefconfig
make libzenoh-pico
```

This patch include the upstream commit [1] that fixes this issue.

[1] 60e635cbb1

Fixes: https://autobuild.buildroot.org/results/0c4/0c4644b17646d3ec482f0a4cf02d6fde19db2c99
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
2025-08-10 00:10:14 +02:00

200 lines
7.1 KiB
Diff

From 584e3d2cf8e879e5ad042f742a3d8656d7d98ed7 Mon Sep 17 00:00:00 2001
From: Jean-Roland Gosse <jean.roland.gosse@gmail.com>
Date: Thu, 10 Jul 2025 14:37:00 +0200
Subject: [PATCH] Fix compilation issues (#986)
* fix: compilation issues
* fix: stringop-overflow
* doc: add comment to _z_str_append function
Upstream: https://github.com/eclipse-zenoh/zenoh-pico/commit/60e635cbb1dc6be8eda559a913d4689845f0d62e
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
---
include/zenoh-pico/utils/string.h | 8 ++++++++
src/api/encoding.c | 4 ++--
src/protocol/codec/declarations.c | 4 ++++
src/protocol/codec/transport.c | 3 ++-
src/protocol/config.c | 8 +++-----
src/session/rx.c | 3 +++
src/transport/multicast/rx.c | 4 ++++
src/transport/unicast/rx.c | 4 ++++
8 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/include/zenoh-pico/utils/string.h b/include/zenoh-pico/utils/string.h
index e4ffd69d..2f56cb79 100644
--- a/include/zenoh-pico/utils/string.h
+++ b/include/zenoh-pico/utils/string.h
@@ -18,6 +18,7 @@
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
+#include <string.h>
#ifdef __cplusplus
extern "C" {
@@ -63,6 +64,13 @@ size_t _z_strcnt(char const *haystack_start, const char *harstack_end, const cha
size_t _z_str_startswith(const char *s, const char *needle);
+// Must be used on a null terminated string with str[strlen(str) + 1] being valid memory.
+static inline void _z_str_append(char *str, const char c) {
+ size_t len = strlen(str);
+ str[len] = c;
+ str[len + 1] = '\0';
+}
+
#ifdef __cplusplus
}
#endif
diff --git a/src/api/encoding.c b/src/api/encoding.c
index b4ff4cb1..16a5b9ff 100644
--- a/src/api/encoding.c
+++ b/src/api/encoding.c
@@ -19,6 +19,7 @@
#include <string.h>
#include "zenoh-pico.h"
+#include "zenoh-pico/utils/string.h"
#if Z_FEATURE_ENCODING_VALUES == 1
#define ENCODING_SCHEMA_SEPARATOR ';'
@@ -196,11 +197,10 @@ static z_result_t _z_encoding_convert_into_string(const z_loaned_encoding_t *enc
return _Z_ERR_SYSTEM_OUT_OF_MEMORY;
}
// Copy prefix
- char sep = ENCODING_SCHEMA_SEPARATOR;
(void)strncpy(value, prefix, prefix_len);
// Copy schema and separator
if (has_schema) {
- (void)strncat(value, &sep, 1);
+ _z_str_append(value, ENCODING_SCHEMA_SEPARATOR);
(void)strncat(value, _z_string_data(&encoding->schema), _z_string_len(&encoding->schema));
}
// Fill container
diff --git a/src/protocol/codec/declarations.c b/src/protocol/codec/declarations.c
index 905aad39..2146537e 100644
--- a/src/protocol/codec/declarations.c
+++ b/src/protocol/codec/declarations.c
@@ -163,6 +163,10 @@ z_result_t _z_declaration_encode(_z_wbuf_t *wbf, const _z_declaration_t *decl) {
case _Z_DECL_FINAL: {
ret = _z_decl_final_encode(wbf);
} break;
+
+ default:
+ ret = _Z_ERR_MESSAGE_SERIALIZATION_FAILED;
+ break;
}
return ret;
}
diff --git a/src/protocol/codec/transport.c b/src/protocol/codec/transport.c
index 894fb41d..51830cd1 100644
--- a/src/protocol/codec/transport.c
+++ b/src/protocol/codec/transport.c
@@ -217,11 +217,12 @@ z_result_t _z_init_encode(_z_wbuf_t *wbf, uint8_t header, const _z_t_msg_init_t
}
z_result_t _z_init_decode_ext(_z_msg_ext_t *extension, void *ctx) {
+ _ZP_UNUSED(ctx);
z_result_t ret = _Z_RES_OK;
- _z_t_msg_init_t *msg = (_z_t_msg_init_t *)ctx;
if (false) {
#if Z_FEATURE_FRAGMENTATION == 1
} else if (_Z_EXT_FULL_ID(extension->_header) == _Z_MSG_EXT_ID_INIT_PATCH) {
+ _z_t_msg_init_t *msg = (_z_t_msg_init_t *)ctx;
msg->_patch = (uint8_t)extension->_body._zint._val;
#endif
} else if (_Z_MSG_EXT_IS_MANDATORY(extension->_header)) {
diff --git a/src/protocol/config.c b/src/protocol/config.c
index 1cfcff9c..245e7c3d 100644
--- a/src/protocol/config.c
+++ b/src/protocol/config.c
@@ -21,6 +21,7 @@
#include "zenoh-pico/collections/string.h"
#include "zenoh-pico/utils/pointers.h"
+#include "zenoh-pico/utils/string.h"
z_result_t _z_config_init(_z_config_t *ps) {
_z_str_intmap_init(ps);
@@ -142,15 +143,12 @@ size_t _z_str_intmap_strlen(const _z_str_intmap_t *s, uint8_t argc, _z_str_intma
void _z_str_intmap_onto_str(char *dst, size_t dst_len, const _z_str_intmap_t *s, uint8_t argc,
_z_str_intmapping_t argv[]) {
size_t len = dst_len;
- const char lsep = INT_STR_MAP_LIST_SEPARATOR;
- const char ksep = INT_STR_MAP_KEYVALUE_SEPARATOR;
-
dst[0] = '\0';
for (size_t i = 0; i < argc; i++) {
char *v = _z_str_intmap_get(s, argv[i]._key);
if (v != NULL) {
if (len > (size_t)0) {
- (void)strncat(dst, &lsep, 1); // List separator
+ _z_str_append(dst, INT_STR_MAP_LIST_SEPARATOR); // List separator
len = len - (size_t)1;
}
@@ -159,7 +157,7 @@ void _z_str_intmap_onto_str(char *dst, size_t dst_len, const _z_str_intmap_t *s,
len = len - strlen(argv[i]._str);
}
if (len > (size_t)0) {
- (void)strncat(dst, &ksep, 1); // KeyValue separator
+ _z_str_append(dst, INT_STR_MAP_KEYVALUE_SEPARATOR); // KeyValue separator
len = len - (size_t)1;
}
if (len > (size_t)0) {
diff --git a/src/session/rx.c b/src/session/rx.c
index d85f9d38..8556ce1d 100644
--- a/src/session/rx.c
+++ b/src/session/rx.c
@@ -93,6 +93,8 @@ static z_result_t _z_handle_declare(_z_session_t *zn, _z_n_msg_declare_t *decl,
static z_result_t _z_handle_request(_z_session_rc_t *zsrc, _z_session_t *zn, _z_n_msg_request_t *req,
z_reliability_t reliability) {
+ _ZP_UNUSED(reliability);
+ _ZP_UNUSED(zsrc);
switch (req->_tag) {
case _Z_REQUEST_QUERY:
#if Z_FEATURE_QUERYABLE == 1
@@ -158,6 +160,7 @@ static z_result_t _z_handle_response(_z_session_t *zn, _z_n_msg_response_t *resp
}
#else
_z_n_msg_response_clear(resp);
+ _ZP_UNUSED(zn);
#endif
return _Z_RES_OK;
}
diff --git a/src/transport/multicast/rx.c b/src/transport/multicast/rx.c
index 121406d0..47269b1a 100644
--- a/src/transport/multicast/rx.c
+++ b/src/transport/multicast/rx.c
@@ -294,6 +294,10 @@ static z_result_t _z_multicast_handle_fragment_inner(_z_transport_multicast_t *z
*dbuf_state = _Z_DBUF_STATE_NULL;
}
#else
+ _ZP_UNUSED(ztm);
+ _ZP_UNUSED(header);
+ _ZP_UNUSED(msg);
+ _ZP_UNUSED(entry);
_Z_INFO("Fragment dropped because fragmentation feature is deactivated");
#endif
return ret;
diff --git a/src/transport/unicast/rx.c b/src/transport/unicast/rx.c
index c5ccf932..43e1b4c8 100644
--- a/src/transport/unicast/rx.c
+++ b/src/transport/unicast/rx.c
@@ -248,6 +248,10 @@ static z_result_t _z_unicast_handle_fragment_inner(_z_transport_unicast_t *ztu,
*dbuf_state = _Z_DBUF_STATE_NULL;
}
#else
+ _ZP_UNUSED(ztu);
+ _ZP_UNUSED(header);
+ _ZP_UNUSED(msg);
+ _ZP_UNUSED(peer);
_Z_INFO("Fragment dropped because fragmentation feature is deactivated");
#endif
return ret;
--
2.50.1