gdb/riscv: Fix oob memory access when printing info registers
authorCiaran Woodward <ciaranwoodward@xmos.com>
Fri, 1 Sep 2023 11:13:55 +0000 (12:13 +0100)
committerTom Tromey <tromey@adacore.com>
Tue, 5 Sep 2023 16:33:38 +0000 (10:33 -0600)
If the length of a register name was greater than 15,
print_spaces was called with a negative number, which
prints random data from the heap instead of the requested
number of spaces.

This could happen if a target-description file was used
to specify additional long-named registers.

Fix is simple - don't ask for fewer than 1 space (since
we still want column separation).

Approved-by: Kevin Buettner <kevinb@redhat.com>
gdb/riscv-tdep.c

index ae18eb644527e90570bdf434914e0e2145bbf1ab..3a2891c2c9201510e653870e241bd1614df6104e 100644 (file)
@@ -1145,7 +1145,7 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
   enum tab_stops { value_column_1 = 15 };
 
   gdb_puts (name, file);
-  print_spaces (value_column_1 - strlen (name), file);
+  print_spaces (std::max<int> (1, value_column_1 - strlen (name)), file);
 
   try
     {