diff options
author | Tom Tromey <tom@tromey.com> | 2017-08-14 00:15:33 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2017-09-09 14:10:49 -0600 |
commit | 49663d051c70e1366f9b94f586459a329e9b7053 (patch) | |
tree | 7bdf3526f3abcddcdadee7efe6c156df2af1376c /gdb/p-valprint.c | |
parent | 0b868b60c97b13566cefc8c8f1984225b0165eec (diff) | |
download | gdb-49663d051c70e1366f9b94f586459a329e9b7053.zip gdb-49663d051c70e1366f9b94f586459a329e9b7053.tar.gz gdb-49663d051c70e1366f9b94f586459a329e9b7053.tar.bz2 |
Use gdb::byte_vector in pascal_object_print_value
This changes pascal_object_print_value to use a gdb::byte_vector.
This removes a cleanup. This change also points out how the previous
code had a possible use-after-free bug.
ChangeLog
2017-09-09 Tom Tromey <tom@tromey.com>
* p-valprint.c (pascal_object_print_value): Use gdb::byte_vector.
Diffstat (limited to 'gdb/p-valprint.c')
-rw-r--r-- | gdb/p-valprint.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index 1cd69cc..d12b636 100644 --- a/gdb/p-valprint.c +++ b/gdb/p-valprint.c @@ -38,6 +38,7 @@ #include "cp-abi.h" #include "cp-support.h" #include "objfiles.h" +#include "common/byte-vector.h" /* Decorations for Pascal. */ @@ -730,6 +731,7 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr, const gdb_byte *base_valaddr = NULL; LONGEST thisoffset; int skip = 0; + gdb::byte_vector buf; if (BASETYPE_VIA_VIRTUAL (type, i)) { @@ -769,20 +771,15 @@ pascal_object_print_value (struct type *type, const gdb_byte *valaddr, if (boffset < 0 || boffset >= TYPE_LENGTH (type)) { - gdb_byte *buf; - struct cleanup *back_to; + buf.resize (TYPE_LENGTH (baseclass)); - buf = (gdb_byte *) xmalloc (TYPE_LENGTH (baseclass)); - back_to = make_cleanup (xfree, buf); - - base_valaddr = buf; - if (target_read_memory (address + boffset, buf, + base_valaddr = buf.data (); + if (target_read_memory (address + boffset, buf.data (), TYPE_LENGTH (baseclass)) != 0) skip = 1; address = address + boffset; thisoffset = 0; boffset = 0; - do_cleanups (back_to); } else base_valaddr = valaddr; |