From 4e88a66f184d2be1324c71491789fc7f6b60ca95 Mon Sep 17 00:00:00 2001 From: Jean-Roland Date: Sat, 12 Oct 2024 10:38:09 +0200 Subject: [PATCH] fix: revert payload aliasing --- include/zenoh-pico/collections/slice.h | 1 - src/collections/slice.c | 4 ---- src/protocol/codec.c | 6 +++++- src/protocol/codec/message.c | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/zenoh-pico/collections/slice.h b/include/zenoh-pico/collections/slice.h index 298cef365..00101c185 100644 --- a/include/zenoh-pico/collections/slice.h +++ b/include/zenoh-pico/collections/slice.h @@ -61,7 +61,6 @@ static inline _z_slice_t _z_slice_alias(const _z_slice_t bs) { z_result_t _z_slice_init(_z_slice_t *bs, size_t capacity); _z_slice_t _z_slice_make(size_t capacity); _z_slice_t _z_slice_alias_buf(const uint8_t *bs, size_t len); -_z_slice_t _z_slice_alias_non_alloced_slice(_z_slice_t *bs); _z_slice_t _z_slice_from_buf_custom_deleter(const uint8_t *p, size_t len, _z_delete_context_t dc); _z_slice_t _z_slice_copy_from_buf(const uint8_t *bs, size_t len); _z_slice_t _z_slice_steal(_z_slice_t *b); diff --git a/src/collections/slice.c b/src/collections/slice.c index 68bf4ffbe..5c9116ea7 100644 --- a/src/collections/slice.c +++ b/src/collections/slice.c @@ -67,10 +67,6 @@ _z_slice_t _z_slice_alias_buf(const uint8_t *p, size_t len) { return _z_slice_from_buf_custom_deleter(p, len, _z_delete_context_null()); } -_z_slice_t _z_slice_alias_non_alloced_slice(_z_slice_t *bs) { - return _z_slice_from_buf_custom_deleter(bs->start, bs->len, _z_delete_context_null()); -} - _z_slice_t _z_slice_copy_from_buf(const uint8_t *p, size_t len) { _z_slice_t bs = _z_slice_alias_buf(p, len); return _z_slice_duplicate(&bs); diff --git a/src/protocol/codec.c b/src/protocol/codec.c index c887f3cf0..0d6656327 100644 --- a/src/protocol/codec.c +++ b/src/protocol/codec.c @@ -283,7 +283,11 @@ z_result_t _z_slice_decode(_z_slice_t *bs, _z_zbuf_t *zbf) { return _z_slice_dec z_result_t _z_bytes_decode(_z_bytes_t *bs, _z_zbuf_t *zbf) { _z_slice_t s; _Z_RETURN_IF_ERR(_z_slice_decode(&s, zbf)); - return _z_bytes_from_slice(bs, s); + if (_z_slice_is_alloced(&s)) { + return _z_bytes_from_slice(bs, s); + } else { + return _z_bytes_from_buf(bs, s.start, s.len); + } } z_result_t _z_bytes_encode_val(_z_wbuf_t *wbf, const _z_bytes_t *bs) { diff --git a/src/protocol/codec/message.c b/src/protocol/codec/message.c index 9ba8f98c0..8ae8616e9 100644 --- a/src/protocol/codec/message.c +++ b/src/protocol/codec/message.c @@ -313,7 +313,7 @@ z_result_t _z_push_body_decode_extensions(_z_msg_ext_t *extension, void *ctx) { if (_z_slice_is_alloced(&extension->_body._zbuf._val)) { s = _z_slice_steal(&extension->_body._zbuf._val); } else { - s = _z_slice_alias_non_alloced_slice(&extension->_body._zbuf._val); + _Z_RETURN_IF_ERR(_z_slice_copy(&s, &extension->_body._zbuf._val)); } ret = _z_bytes_from_slice(&pshb->_body._put._attachment, s); break; @@ -454,7 +454,7 @@ z_result_t _z_query_decode_extensions(_z_msg_ext_t *extension, void *ctx) { if (_z_slice_is_alloced(&extension->_body._zbuf._val)) { s = _z_slice_steal(&extension->_body._zbuf._val); } else { - s = _z_slice_alias_non_alloced_slice(&extension->_body._zbuf._val); + _Z_RETURN_IF_ERR(_z_slice_copy(&s, &extension->_body._zbuf._val)); } ret = _z_bytes_from_slice(&msg->_ext_attachment, s); break;