[binutils-gdb] gdb: handle missing arguments to 'maint test-remote-args'
Andrew Burgess via Gdb-cvs <[email protected]> Wed, 3 Jun 2026 08:24:10 +0000 (GMT)
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=663cb9c0428068165fc98675599442163d302d41 commit 663cb9c0428068165fc98675599442163d302d41 Author: Andrew Burgess <[email protected]> Date: Tue Jun 2 15:34:36 2026 +0100 gdb: handle missing arguments to 'maint test-remote-args' I noticed that the 'maint test-remote-args' command, implemented by the test_remote_args_command function in remote.c, contains this code: static void test_remote_args_command (const char *args, int from_tty) { std::vector<std::string> split_args = gdb::remote_args::split (args); ... etc ... The problem here is that gdb::remote_args::split expects a std::string, and so ends up creating a std::string from ARGS. However, ARGS can be NULL, e.g. if a user does this: (gdb) maint test-remote-args This ends up creating a std::string from a NULL pointer, which is undefined behaviour. Fix this by adding a check to test_remote_args_command, and throwing an error if ARGS is NULL. Add a new test to verify this case. Additionally, fix a typo in the header comment for test_remote_args_command. Approved-By: Tom Tromey <[email protected]> Diff: --- gdb/remote.c | 5 ++++- gdb/testsuite/gdb.base/maint-test-remote-args.exp | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/gdb/remote.c b/gdb/remote.c index 735774903f3..2961664cf33 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -12767,12 +12767,15 @@ cli_packet_command (const char *args, int from_tty) The split and joined arguments are printed out. Additionally, the joined arguments are split and joined a second time, and compared to the result of the first join, this provides some basic validation that GDB - sess the joined arguments as equivalent to the original argument + sees the joined arguments as equivalent to the original argument string. */ static void test_remote_args_command (const char *args, int from_tty) { + if (args == nullptr) + error (_("missing argument string")); + std::vector<std::string> split_args = gdb::remote_args::split (args); gdb_printf ("Input (%s)\n", args); diff --git a/gdb/testsuite/gdb.base/maint-test-remote-args.exp b/gdb/testsuite/gdb.base/maint-test-remote-args.exp index b1a3e67abc6..22d9e81c25d 100644 --- a/gdb/testsuite/gdb.base/maint-test-remote-args.exp +++ b/gdb/testsuite/gdb.base/maint-test-remote-args.exp @@ -38,3 +38,6 @@ gdb_test "maint test-remote-args a b c" \ " \\(b\\)" \ " \\(c\\)" \ "Output \\(a b c\\)"] + +gdb_test "maint test-remote-args" "^missing argument string" \ + "command without an argument string"