From f5c7cae55fc3e19d074198bc12152486067ea8c7 Mon Sep 17 00:00:00 2001 From: Radoslav Kolev Date: Thu, 24 Apr 2025 00:45:25 +0300 Subject: [PATCH] hexdump: fix regression for uint16 on big endian systems Commit 34751d8bf introduced a bug in the handling of uint16 values on big endian systems not considered safe for unaligned access when falling back to memcpy. Signed-off-by: Radoslav Kolev Signed-off-by: Denys Vlasenko --- libbb/dump.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) --- a/libbb/dump.c +++ b/libbb/dump.c @@ -667,15 +667,21 @@ static NOINLINE void display(priv_dumper conv_u(pr, bp); break; case F_UINT: { + union { + uint16_t uval16; + uint32_t uval32; + } u; unsigned value = (unsigned char)*bp; switch (pr->bcnt) { case 1: break; case 2: - move_from_unaligned16(value, bp); + move_from_unaligned16(u.uval16, bp); + value = u.uval16; break; case 4: - move_from_unaligned32(value, bp); + move_from_unaligned32(u.uval32, bp); + value = u.uval32; break; /* case 8: no users yet */ }