From: Piotr Rudnicki Date: Wed, 9 Apr 2025 13:17:31 +0000 (+0200) Subject: gdb: add check for empty array X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e25c84752c9df2bf3a999b53afb58e5bebaf3b7c;p=thirdparty%2Fbinutils-gdb.git 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 --- diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp index e1c996e99e1..8634668605a 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 09af0ae99ec..1b63343c4a7 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -1695,6 +1695,9 @@ value_array (int lowbound, gdb::array_view 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)) {