asan: csky floatformat_to_double uninitialised value
authorAlan Modra <amodra@gmail.com>
Mon, 3 Apr 2023 03:05:53 +0000 (12:35 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 3 Apr 2023 13:44:41 +0000 (23:14 +0930)
* csky-dis.c (csky_print_operand <OPRND_TYPE_FCONSTANT>): Don't
access ibytes after read_memory_func error.  Change type of
ibytes to avoid casts.

opcodes/csky-dis.c

index fc7d595ccec8e988e4cccf5d66f6b9c9fea52146..1deea049d7e266086c73677a491011c6f4b6bc67 100644 (file)
@@ -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);