diff options
author | Piotr Rudnicki <piotr.rudnicki@intel.com> | 2025-04-09 15:17:31 +0200 |
---|---|---|
committer | Piotr Rudnicki <piotr.rudnicki@intel.com> | 2025-04-14 11:42:54 +0200 |
commit | e25c84752c9df2bf3a999b53afb58e5bebaf3b7c (patch) | |
tree | 6182c394db62656f90e24b7c915b85163500ab85 | |
parent | 29b68e449be8816505487ef7cd5abde72ed21ca4 (diff) | |
download | binutils-e25c84752c9df2bf3a999b53afb58e5bebaf3b7c.zip binutils-e25c84752c9df2bf3a999b53afb58e5bebaf3b7c.tar.gz binutils-e25c84752c9df2bf3a999b53afb58e5bebaf3b7c.tar.bz2 |
gdb: add check for empty array
With the command before the change, gdb crashes with message:
(gdb) p 1 == { }
Fatal signal: Segmentation fault
After the fix in this commit, gdb shows following message:
(gdb) p 1 == { }
size of the array element must not be zero
Add new test cases to file gdb.base/printcmds.exp to test this change
Approved-By: Tom Tromey <tom@tromey.com>
-rw-r--r-- | gdb/testsuite/gdb.base/printcmds.exp | 7 | ||||
-rw-r--r-- | gdb/valops.c | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp index e1c996e..8634668 100644 --- a/gdb/testsuite/gdb.base/printcmds.exp +++ b/gdb/testsuite/gdb.base/printcmds.exp @@ -744,6 +744,12 @@ proc test_print_char_arrays {} { gdb_test_no_output "set print address off" "address off char arrays" } +proc test_print_arrays_negative {} { + # Check whether correct error messages are printed + gdb_test "p 1 == { }" "size of the array element must not be zero" + gdb_test "p 1 == { 1, 'a' }" "array elements must all be the same size" +} + proc test_print_nibbles {} { gdb_test_no_output "set print nibbles on" foreach lang_line { @@ -1235,6 +1241,7 @@ test_print_int_arrays test_print_typedef_arrays test_artificial_arrays test_print_char_arrays +test_print_arrays_negative test_print_nibbles # We used to do the runto main here. test_print_string_constants diff --git a/gdb/valops.c b/gdb/valops.c index 09af0ae..1b63343 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1695,6 +1695,9 @@ value_array (int lowbound, gdb::array_view<struct value *> elemvec) /* Validate that the bounds are reasonable and that each of the elements have the same size. */ + if (elemvec.empty ()) + error (_("size of the array element must not be zero")); + typelength = type_length_units (elemvec[0]->enclosing_type ()); for (struct value *other : elemvec.slice (1)) { |