From d835c495c1a58d6f02f2a6abe81512e704023648 Mon Sep 17 00:00:00 2001 From: Ilya Verbin <iverbin@tarantool.org> Date: Wed, 9 Oct 2024 22:01:30 +0300 Subject: [PATCH] box: fix UBSan error regarding misaligned store in field_map.c The type cast is unnecessary and causes false-positive errors: NO_WRAP ``` ./src/box/field_map.c:110:10: runtime error: store to misaligned address 0x507000071082 for type 'uint32_t *' (aka 'unsigned int *'), which requires 4 byte alignment 0x507000071082: note: pointer points here 01 00 00 00 be be be be f0 ff ff ff 02 00 00 00 be be be be be be be be 00 00 00 00 00 00 00 00 ^ SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ./src/box/field_map.c:110:10 ``` NO_WRAP Closes #10631 NO_DOC=bugfix NO_CHANGELOG=minor NO_TEST=tested by debug_asan_clang workflow (cherry picked from commit 5ddbd85cc377a29dc27d01ad06acdc6acc24cc5b) --- src/box/field_map.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/box/field_map.c b/src/box/field_map.c index dc903115e0..7fb4c307f7 100644 --- a/src/box/field_map.c +++ b/src/box/field_map.c @@ -116,10 +116,10 @@ field_map_build(struct field_map_builder *builder, char *buffer) /** Retrive memory for the extent. */ store_u32(&field_map[i], extent_wptr - (char *)field_map); store_u32(extent_wptr, extent->size); + extent_wptr += sizeof(uint32_t); uint32_t extent_offset_sz = extent->size * sizeof(uint32_t); - memcpy(&((uint32_t *) extent_wptr)[1], extent->offset, - extent_offset_sz); - extent_wptr += sizeof(uint32_t) + extent_offset_sz; + memcpy(extent_wptr, extent->offset, extent_offset_sz); + extent_wptr += extent_offset_sz; } assert(extent_wptr == buffer + builder->extents_size); } -- GitLab