aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJan Vrany <jan.vrany@labware.com>2022-12-19 11:24:36 +0000
committerJan Vrany <jan.vrany@labware.com>2022-12-19 11:24:36 +0000
commit37e5833da583310268dc1b04fc6839e81b987897 (patch)
treebfefb5d1a2af67f4e4dd1593b98013c913a62e29 /gdb
parent42f39fdedcf3321cab9964945d3f5bca58967b80 (diff)
downloadgdb-37e5833da583310268dc1b04fc6839e81b987897.zip
gdb-37e5833da583310268dc1b04fc6839e81b987897.tar.gz
gdb-37e5833da583310268dc1b04fc6839e81b987897.tar.bz2
gdb: fix command lookup in execute_command ()
Commit b5661ff2 ("gdb: fix possible use-after-free when executing commands") used lookup_cmd_exact () to lookup command again after its execution to avoid possible use-after-free error. However this change broke test gdb.base/define.exp which defines a post-hook for subcommand ("target testsuite"). In this case, lookup_cmd_exact () returned NULL because there's no command 'testsuite' in top-level commands. This commit fixes this case by looking up the command again using the original command line via lookup_cmd (). Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/top.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/gdb/top.c b/gdb/top.c
index 45e65be..b732f29 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -651,11 +651,6 @@ execute_command (const char *p, int from_tty)
}
}
- /* Remember name of the command. This is needed later when
- executing command post-hooks to handle the case when command
- is redefined or removed during it's execution. See below. */
- std::string c_name (c->name);
-
/* If this command has been pre-hooked, run the hook first. */
execute_cmd_pre_hook (c);
@@ -698,7 +693,8 @@ execute_command (const char *p, int from_tty)
We need to lookup the command again since during its execution,
a command may redefine itself. In this case, C pointer
becomes invalid so we need to look it up again. */
- c = lookup_cmd_exact (c_name.c_str (), cmdlist);
+ const char *cmd2 = cmd_start;
+ c = lookup_cmd (&cmd2, cmdlist, "", nullptr, 1, 1);
if (c != nullptr)
execute_cmd_post_hook (c);