[RFA] Fix crash when command arg is missing in faas/taas/tfaas commands.
Commit Message
GDB crashes when doing:
(gdb) faas
Aborted
Do the needed check to avoid crashing.
gdb/ChangeLog
2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* stack.c (faas_command): Check a command is provided.
* thread.c (taas_command, tfaas_command): Likewise.
gdb/testsuite/ChangeLog
2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* gdb.threads/pthreads.exp: Test taas and tfaas without command.
* gdb.base/frameapply.exp: Test faas without command.
---
gdb/stack.c | 2 ++
gdb/testsuite/gdb.base/frameapply.exp | 2 ++
gdb/testsuite/gdb.threads/pthreads.exp | 6 +++++-
gdb/thread.c | 4 ++++
4 files changed, 13 insertions(+), 1 deletion(-)
Comments
* Philippe Waroquiers <philippe.waroquiers@skynet.be> [2019-12-06 00:05:25 +0100]:
> GDB crashes when doing:
> (gdb) faas
> Aborted
>
> Do the needed check to avoid crashing.
>
> gdb/ChangeLog
> 2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be>
> * stack.c (faas_command): Check a command is provided.
> * thread.c (taas_command, tfaas_command): Likewise.
>
> gdb/testsuite/ChangeLog
> 2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be>
>
> * gdb.threads/pthreads.exp: Test taas and tfaas without command.
> * gdb.base/frameapply.exp: Test faas without command.
LGTM.
thanks,
Andrew
> ---
> gdb/stack.c | 2 ++
> gdb/testsuite/gdb.base/frameapply.exp | 2 ++
> gdb/testsuite/gdb.threads/pthreads.exp | 6 +++++-
> gdb/thread.c | 4 ++++
> 4 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/gdb/stack.c b/gdb/stack.c
> index fcb9cdae03..cc7b7e5bbe 100644
> --- a/gdb/stack.c
> +++ b/gdb/stack.c
> @@ -3281,6 +3281,8 @@ frame_apply_command (const char* cmd, int from_tty)
> static void
> faas_command (const char *cmd, int from_tty)
> {
> + if (cmd == NULL || *cmd == '\0')
> + error (_("Please specify a command to apply on all frames"));
> std::string expanded = std::string ("frame apply all -s ") + cmd;
> execute_command (expanded.c_str (), from_tty);
> }
> diff --git a/gdb/testsuite/gdb.base/frameapply.exp b/gdb/testsuite/gdb.base/frameapply.exp
> index ccf30f2079..30314876d1 100644
> --- a/gdb/testsuite/gdb.base/frameapply.exp
> +++ b/gdb/testsuite/gdb.base/frameapply.exp
> @@ -215,3 +215,5 @@ gdb_test "frame apply level 4-2 p 1" "inverted range" "inverted range"
> gdb_test "frame apply level 0-3" \
> "Please specify a command to apply on the selected frames" \
> "missing command"
> +gdb_test "faas" "Please specify a command to apply on all frames" \
> + "missing command for faas"
> diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp
> index 0bb9083f67..f633b5ec8e 100644
> --- a/gdb/testsuite/gdb.threads/pthreads.exp
> +++ b/gdb/testsuite/gdb.threads/pthreads.exp
> @@ -334,10 +334,14 @@ proc check_qcs {} {
> ] \
> "run a failing command except in one frame of thread 2,3, -s to silently continue. Do not show thread and frame info"
>
> - # Check invalid flag combinations.
> + # Check invalid flag combinations and errors.
> gdb_test "thread apply all -c -s p 1" \
> "thread apply all: -c and -s are mutually exclusive" \
> "check -c and -s cannot be used simultaneously"
> + gdb_test "taas" "Please specify a command to apply on all threads" \
> + "missing command for taas"
> + gdb_test "tfaas" "Please specify a command to apply on all frames of all threads" \
> + "missing command for tfaas"
>
> }
>
> diff --git a/gdb/thread.c b/gdb/thread.c
> index 7c8426d625..a210d328ed 100644
> --- a/gdb/thread.c
> +++ b/gdb/thread.c
> @@ -1818,6 +1818,8 @@ thread_apply_command (const char *tidlist, int from_tty)
> static void
> taas_command (const char *cmd, int from_tty)
> {
> + if (cmd == NULL || *cmd == '\0')
> + error (_("Please specify a command to apply on all threads"));
> std::string expanded = std::string ("thread apply all -s ") + cmd;
> execute_command (expanded.c_str (), from_tty);
> }
> @@ -1827,6 +1829,8 @@ taas_command (const char *cmd, int from_tty)
> static void
> tfaas_command (const char *cmd, int from_tty)
> {
> + if (cmd == NULL || *cmd == '\0')
> + error (_("Please specify a command to apply on all frames of all threads"));
> std::string expanded
> = std::string ("thread apply all -s -- frame apply all -s ") + cmd;
> execute_command (expanded.c_str (), from_tty);
> --
> 2.20.1
>
On Thu, 2019-12-05 at 23:08 +0000, Andrew Burgess wrote:
> * Philippe Waroquiers <philippe.waroquiers@skynet.be> [2019-12-06 00:05:25 +0100]:
>
> > GDB crashes when doing:
> > (gdb) faas
> > Aborted
> >
> > Do the needed check to avoid crashing.
> >
> > gdb/ChangeLog
> > 2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be>
> > * stack.c (faas_command): Check a command is provided.
> > * thread.c (taas_command, tfaas_command): Likewise.
> >
> > gdb/testsuite/ChangeLog
> > 2019-12-05 Philippe Waroquiers <philippe.waroquiers@skynet.be>
> >
> > * gdb.threads/pthreads.exp: Test taas and tfaas without command.
> > * gdb.base/frameapply.exp: Test faas without command.
>
> LGTM.
Thanks for the review, pushed.
Philippe
@@ -3281,6 +3281,8 @@ frame_apply_command (const char* cmd, int from_tty)
static void
faas_command (const char *cmd, int from_tty)
{
+ if (cmd == NULL || *cmd == '\0')
+ error (_("Please specify a command to apply on all frames"));
std::string expanded = std::string ("frame apply all -s ") + cmd;
execute_command (expanded.c_str (), from_tty);
}
@@ -215,3 +215,5 @@ gdb_test "frame apply level 4-2 p 1" "inverted range" "inverted range"
gdb_test "frame apply level 0-3" \
"Please specify a command to apply on the selected frames" \
"missing command"
+gdb_test "faas" "Please specify a command to apply on all frames" \
+ "missing command for faas"
@@ -334,10 +334,14 @@ proc check_qcs {} {
] \
"run a failing command except in one frame of thread 2,3, -s to silently continue. Do not show thread and frame info"
- # Check invalid flag combinations.
+ # Check invalid flag combinations and errors.
gdb_test "thread apply all -c -s p 1" \
"thread apply all: -c and -s are mutually exclusive" \
"check -c and -s cannot be used simultaneously"
+ gdb_test "taas" "Please specify a command to apply on all threads" \
+ "missing command for taas"
+ gdb_test "tfaas" "Please specify a command to apply on all frames of all threads" \
+ "missing command for tfaas"
}
@@ -1818,6 +1818,8 @@ thread_apply_command (const char *tidlist, int from_tty)
static void
taas_command (const char *cmd, int from_tty)
{
+ if (cmd == NULL || *cmd == '\0')
+ error (_("Please specify a command to apply on all threads"));
std::string expanded = std::string ("thread apply all -s ") + cmd;
execute_command (expanded.c_str (), from_tty);
}
@@ -1827,6 +1829,8 @@ taas_command (const char *cmd, int from_tty)
static void
tfaas_command (const char *cmd, int from_tty)
{
+ if (cmd == NULL || *cmd == '\0')
+ error (_("Please specify a command to apply on all frames of all threads"));
std::string expanded
= std::string ("thread apply all -s -- frame apply all -s ") + cmd;
execute_command (expanded.c_str (), from_tty);