gdb: fix off-by-one error in quirk_rust_enum
Found by inspection, so I don't have a test for it (I don't think it would be easy to have this bug cause a failure reliably). We allocate space for N fields into `new_fields`, then memcpy N fields at `new_fields + 1`. This overflows the allocated buffer by one field. Fix it by allocating `N + 1` fields. gdb/ChangeLog: * dwarf2/read.c (quirk_rust_enum): Allocate enough fields.
This commit is contained in:
parent
98c59b527b
commit
f408d82c7a
|
@ -1,3 +1,7 @@
|
|||
2020-05-19 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* dwarf2/read.c (quirk_rust_enum): Allocate enough fields.
|
||||
|
||||
2020-05-19 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* NEWS (set exec-file-mismatch): Adjust entry.
|
||||
|
|
|
@ -9420,7 +9420,7 @@ quirk_rust_enum (struct type *type, struct objfile *objfile)
|
|||
/* Make space for the discriminant field. */
|
||||
struct field *disr_field = &TYPE_FIELD (disr_type, 0);
|
||||
field *new_fields
|
||||
= (struct field *) TYPE_ZALLOC (type, (TYPE_NFIELDS (type)
|
||||
= (struct field *) TYPE_ZALLOC (type, ((TYPE_NFIELDS (type) + 1)
|
||||
* sizeof (struct field)));
|
||||
memcpy (new_fields + 1, TYPE_FIELDS (type),
|
||||
TYPE_NFIELDS (type) * sizeof (struct field));
|
||||
|
|
Loading…
Reference in New Issue