From 5a8edb756a56cdfb563006cbc39561994acf6d2d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Mon, 18 Oct 2021 12:32:18 -0600 Subject: Check index in type::field This changes gdb to check the index that is passed to type::field. This caught one bug in the Ada code when running the test suite (actually I found the bug first, then realized that the check would have helped), so this patch fixes that as well. Regression tested on x86-64 Fedora 34. --- gdb/ada-lang.c | 2 +- gdb/gdbtypes.c | 2 +- gdb/gdbtypes.h | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) (limited to 'gdb') diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 98718bc..935358d 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -7539,7 +7539,7 @@ ada_template_to_fixed_record_type_1 (struct type *type, that follow this one. */ if (ada_is_aligner_type (field_type)) { - long field_offset = TYPE_FIELD_BITPOS (field_type, f); + long field_offset = TYPE_FIELD_BITPOS (type, f); field_valaddr = cond_offset_host (field_valaddr, field_offset); field_address = cond_offset_target (field_address, field_offset); diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 3110395..b39d2b7 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -5842,11 +5842,11 @@ append_flags_type_field (struct type *type, int start_bitpos, int nr_bits, gdb_assert (nr_bits >= 1 && (start_bitpos + nr_bits) <= type_bitsize); gdb_assert (name != NULL); + type->set_num_fields (type->num_fields () + 1); type->field (field_nr).set_name (xstrdup (name)); type->field (field_nr).set_type (field_type); type->field (field_nr).set_loc_bitpos (start_bitpos); TYPE_FIELD_BITSIZE (type, field_nr) = nr_bits; - type->set_num_fields (type->num_fields () + 1); } /* Special version of append_flags_type_field to add a flag field. diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index dc575c4..4324641 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -1047,6 +1047,7 @@ struct type /* Get the field at index IDX. */ struct field &field (int idx) const { + gdb_assert (idx >= 0 && idx < num_fields ()); return this->fields ()[idx]; } -- cgit v1.1