From 5cdf86d363747a5e0b67165d32ab512ff50d83d2 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 3 Apr 2023 12:35:53 +0930 Subject: [PATCH] asan: csky floatformat_to_double uninitialised value * csky-dis.c (csky_print_operand ): Don't access ibytes after read_memory_func error. Change type of ibytes to avoid casts. --- opcodes/csky-dis.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/opcodes/csky-dis.c b/opcodes/csky-dis.c index fc7d595ccec..1deea049d7e 100644 --- a/opcodes/csky-dis.c +++ b/opcodes/csky-dis.c @@ -519,7 +519,7 @@ csky_output_operand (char *str, struct operand const *oprnd, case OPRND_TYPE_FCONSTANT: { int shift = oprnd->shift; - char ibytes[8]; + bfd_byte ibytes[8]; int status; bfd_vma addr; int nbytes; @@ -538,19 +538,13 @@ csky_output_operand (char *str, struct operand const *oprnd, else nbytes = 4; - status = dis_info.info->read_memory_func (addr, (bfd_byte *)ibytes, + status = dis_info.info->read_memory_func (addr, ibytes, nbytes, dis_info.info); if (status != 0) /* Address out of bounds. -> lrw rx, [pc, 0ffset]. */ sprintf (buf, "[pc, %d]\t// from address pool at %x", (int)value, (unsigned int)addr); - else - { - dis_info.value = addr; - value = csky_chars_to_number ((unsigned char *)ibytes, 4); - } - - if (oprnd->type == OPRND_TYPE_FCONSTANT) + else if (oprnd->type == OPRND_TYPE_FCONSTANT) { double f; @@ -569,8 +563,10 @@ csky_output_operand (char *str, struct operand const *oprnd, } else { + dis_info.value = addr; dis_info.need_output_symbol = 1; - sprintf (buf, "0x%x", (unsigned int)value); + value = csky_chars_to_number (ibytes, 4); + sprintf (buf, "0x%x", (unsigned int) value); } strcat (str, buf); -- 2.30.2