diff options
author | Luis Machado <luis.machado@linaro.org> | 2020-08-12 17:02:32 -0300 |
---|---|---|
committer | Luis Machado <luis.machado@linaro.org> | 2020-08-12 17:02:32 -0300 |
commit | 6d8a0a5e90936d4bea9bf1ce9b4e1c22d9aaccae (patch) | |
tree | 1a1c7c7956a97bd002fde51577b5792b7e91ae63 /gdb | |
parent | 7cf663a9321e2fc4f4e3316eab77bdd0b21ab4af (diff) | |
download | gdb-6d8a0a5e90936d4bea9bf1ce9b4e1c22d9aaccae.zip gdb-6d8a0a5e90936d4bea9bf1ce9b4e1c22d9aaccae.tar.gz gdb-6d8a0a5e90936d4bea9bf1ce9b4e1c22d9aaccae.tar.bz2 |
Fix malloc allocation size sanity check
During debugging of PR26362, it was noticed that the malloc size check
in check_type_length_before_alloc wasn't detecting an allocation attempt
of a huge amount of bytes, making GDB run into an internal error.
This happens because we're using an int to store a type's length. When the
type length is large enough, the int will overflow and the max_value_size
check won't work anymore.
The following patch fixes this by making the length variable a ULONGEST.
Printing statements were also updated to show the correct number of bytes.
gdb/ChangeLog:
2020-08-12 Luis Machado <luis.machado@linaro.org>
* value.c (check_type_length_before_alloc): Use ULONGEST to store a
type's length.
Use %s and pulongest to print the length.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/value.c | 10 |
2 files changed, 11 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4abc47d..27c6849 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-08-12 Luis Machado <luis.machado@linaro.org> + + * value.c (check_type_length_before_alloc): Use ULONGEST to store a + type's length. + Use %s and pulongest to print the length. + 2020-08-12 Pedro Alves <palves@redhat.com> * NEWS: Move "Multi-target debugging support" item to the diff --git a/gdb/value.c b/gdb/value.c index aac9baaa..a6e2130 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -997,16 +997,16 @@ show_max_value_size (struct ui_file *file, int from_tty, static void check_type_length_before_alloc (const struct type *type) { - unsigned int length = TYPE_LENGTH (type); + ULONGEST length = TYPE_LENGTH (type); if (max_value_size > -1 && length > max_value_size) { if (type->name () != NULL) - error (_("value of type `%s' requires %u bytes, which is more " - "than max-value-size"), type->name (), length); + error (_("value of type `%s' requires %s bytes, which is more " + "than max-value-size"), type->name (), pulongest (length)); else - error (_("value requires %u bytes, which is more than " - "max-value-size"), length); + error (_("value requires %s bytes, which is more than " + "max-value-size"), pulongest (length)); } } |