From: Tom Tromey Date: Fri, 18 Aug 2023 13:55:30 +0000 (-0600) Subject: Fix off-by-one in call to vector::reserve X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=28bb48114db4de4ba0a72940af1c30728b6e82f2;p=binutils-gdb.git 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 --- 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 ());