This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFA 2/4] Use gdb::byte_vector in pascal_object_print_value
- From: Tom Tromey <tom at tromey dot com>
- To: gdb-patches at sourceware dot org
- Cc: Tom Tromey <tom at tromey dot com>
- Date: Fri, 8 Sep 2017 18:41:27 -0600
- Subject: [RFA 2/4] Use gdb::byte_vector in pascal_object_print_value
- Authentication-results: sourceware.org; auth=none
- References: <20170909004129.28782-1-tom@tromey.com>
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.
gdb/ChangeLog
2017-09-08 Tom Tromey <tom@tromey.com>
* p-valprint.c (pascal_object_print_value): Use gdb::byte_vector.
---
gdb/ChangeLog | 4 ++++
gdb/p-valprint.c | 13 +++++--------
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b7f83a4..1f8bb71 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
2017-09-08 Tom Tromey <tom@tromey.com>
+ * p-valprint.c (pascal_object_print_value): Use gdb::byte_vector.
+
+2017-09-08 Tom Tromey <tom@tromey.com>
+
* stack.c (func_command): Use gdb::def_vector.
2017-09-08 Keith Seitz <keiths@redhat.com>
diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c
index 2c80233..10c2399 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;
--
2.9.4