On Thu, 24 Apr 2025 00:45:25 +0300
Radoslav Kolev <[email protected]> wrote:

> 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.

You don't need a union, just use separate uint16_t and uin32_t variables.

        David

> 
> Signed-off-by: Radoslav Kolev <[email protected]>
> ---
>  libbb/dump.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/libbb/dump.c b/libbb/dump.c
> index 2ca9919da..b8e8f4f0a 100644
> --- a/libbb/dump.c
> +++ b/libbb/dump.c
> @@ -667,15 +667,21 @@ static NOINLINE void display(priv_dumper_t* 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 
> */
>                                                       }

_______________________________________________
busybox mailing list
[email protected]
https://lists.busybox.net/mailman/listinfo/busybox

Reply via email to