From 28bb48114db4de4ba0a72940af1c30728b6e82f2 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 18 Aug 2023 07:55:30 -0600 Subject: [PATCH] Fix off-by-one in call to vector::reserve While looking at a bug, I noticed what I think is an off-by-one mistake in a call to vector::reserve. This code: new_args.reserve (args.size ()); new_args.push_back (value_from_pointer (lookup_pointer_type (values_type), struct_addr)); new_args.insert (new_args.end (), args.begin (), args.end ()); ... reserves 'size()' entries, but then proceeds to push one extra one. This shouldn't have any really bad effects, as insert will grow the vector. Still, it seems better to use the correct size if we're going to bother calling reserve. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30780 Reviewed-by: John Baldwin --- gdb/infcall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gdb/infcall.c b/gdb/infcall.c index bea5b185ddc..41ed3ed73a1 100644 --- a/gdb/infcall.c +++ b/gdb/infcall.c @@ -1233,7 +1233,7 @@ call_function_by_hand_dummy (struct value *function, if (return_method == return_method_hidden_param) { /* Add the new argument to the front of the argument list. */ - new_args.reserve (args.size ()); + new_args.reserve (1 + args.size ()); new_args.push_back (value_from_pointer (lookup_pointer_type (values_type), struct_addr)); new_args.insert (new_args.end (), args.begin (), args.end ()); -- 2.30.2