[RFA] Fix crash when command arg is missing in faas/taas/tfaas commands.

Message ID 20191205230525.19171-1-philippe.waroquiers@skynet.be
State New
Headers show
Series
  • [RFA] Fix crash when command arg is missing in faas/taas/tfaas commands.
Related show

Commit Message

Philippe Waroquiers Dec. 5, 2019, 11:05 p.m.
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(-)

-- 
2.20.1

Comments

Andrew Burgess Dec. 5, 2019, 11:08 p.m. | #1
* 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

>
Philippe Waroquiers Dec. 6, 2019, 5:10 a.m. | #2
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

Patch

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);