aboutsummaryrefslogtreecommitdiff
path: root/gdb/value.c
diff options
context:
space:
mode:
authorLuis Machado <luis.machado@linaro.org>2020-08-12 17:02:32 -0300
committerLuis Machado <luis.machado@linaro.org>2020-08-12 17:02:32 -0300
commit6d8a0a5e90936d4bea9bf1ce9b4e1c22d9aaccae (patch)
tree1a1c7c7956a97bd002fde51577b5792b7e91ae63 /gdb/value.c
parent7cf663a9321e2fc4f4e3316eab77bdd0b21ab4af (diff)
downloadgdb-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/value.c')
-rw-r--r--gdb/value.c10
1 files changed, 5 insertions, 5 deletions
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));
}
}