diff options
author | Jerome Guitton <guitton@adacore.com> | 2009-02-04 17:46:36 +0000 |
---|---|---|
committer | Jerome Guitton <guitton@adacore.com> | 2009-02-04 17:46:36 +0000 |
commit | b53049714948aa8a041abd1c856960b91f94cd1c (patch) | |
tree | 2115956031379b5e081d63d089d84fb6c3abfa4c | |
parent | e94345ae4922a558b1f3ce56c80cd8bd48663a01 (diff) | |
download | gdb-b53049714948aa8a041abd1c856960b91f94cd1c.zip gdb-b53049714948aa8a041abd1c856960b91f94cd1c.tar.gz gdb-b53049714948aa8a041abd1c856960b91f94cd1c.tar.bz2 |
* ada-lang.c (ada_template_to_fixed_record_type_1): Check size
of type to guard against a crash.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ada-lang.c | 10 |
2 files changed, 14 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 07d8565..04a11fc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2008-02-04 Jerome Guitton <guitton@adacore.com> + + * ada-lang.c (ada_template_to_fixed_record_type_1): Check size + of type to guard against a crash. + 2009-02-04 Jerome Guitton <guitton@adacore.com> * value.c (value_from_contents_and_address): Always return diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 656e771..2552bff 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -6877,7 +6877,15 @@ ada_template_to_fixed_record_type_1 (struct type *type, else if (is_dynamic_field (type, f)) { if (dval0 == NULL) - dval = value_from_contents_and_address (rtype, valaddr, address); + { + /* rtype's length is computed based on the run-time + value of discriminants. If the discriminants are not + initialized, the type size may be completely bogus and + GDB may fail to allocate a value for it. So check the + size first before creating the value. */ + check_size (rtype); + dval = value_from_contents_and_address (rtype, valaddr, address); + } else dval = dval0; |