From: Simon Marchi Date: Mon, 17 Oct 2016 20:47:36 +0000 (-0400) Subject: Fix -trace-save crash when argument is missing X-Git-Tag: users/ARM/embedded-binutils-master-2016q4~490 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5bad3170301060ee0801a739ffc213abae664973;p=external%2Fbinutils.git Fix -trace-save crash when argument is missing -trace-save doesn't check whether an argument is passed, leading to a segfault if you pass nothing. I added a small test, which only tests the error conditions of -trace-save. gdb/ChangeLog: * mi/mi-main.c (mi_cmd_trace_save): Check if argument is present before using it. gdb/testsuite/ChangeLog: * gdb.trace/mi-trace-save.exp: New file. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4ebbf8d..4f706fd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2016-10-17 Simon Marchi + + * mi/mi-main.c (mi_cmd_trace_save): Check if argument is present + before using it. + 2016-10-17 Pedro Alves * charset.h (class wchar_iterator) [PHONY_ICONV] : Use diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 7cd9706..81e82ed 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -2699,6 +2699,11 @@ mi_cmd_trace_save (char *command, char **argv, int argc) break; } } + + if (argc - oind != 1) + error (_("Exactly one argument required " + "(file in which to save trace data)")); + filename = argv[oind]; if (generate_ctf) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ac2d05d..f0c8415 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-10-17 Simon Marchi + + * gdb.trace/mi-trace-save.exp: New file. + 2016-10-13 Yao Qi * gdb.base/code_elim.exp (get_var_address): Remove. diff --git a/gdb/testsuite/gdb.trace/mi-trace-save.exp b/gdb/testsuite/gdb.trace/mi-trace-save.exp new file mode 100644 index 0000000..96bb70d --- /dev/null +++ b/gdb/testsuite/gdb.trace/mi-trace-save.exp @@ -0,0 +1,42 @@ +# Copyright 2016 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# The -trace-save command is already tested in other files (e.g. +# mi-trace-frame-collected.exp), so this file currently only tests the error +# cases of -trace-save. + +load_lib mi-support.exp + +mi_gdb_start + +# Test without the required "filename" argument. + +proc test_trace_save_wrong_num_args { } { + set err_re [string_to_regexp "^error,msg=\"Exactly one argument required (file in which to save trace data)\""] + + mi_gdb_test "-trace-save" "$err_re" "-trace-save with missing argument" + mi_gdb_test "-trace-save a b" "$err_re" "-trace-save with missing argument" +} + +# Test with an unrecognized option. + +proc test_trace_save_wrong_opt { } { + set err_re [string_to_regexp "^error,msg=\"-trace-save: Unknown option ``hey''\""] + + mi_gdb_test "-trace-save -hey" "$err_re" "-trace-save with wrong option" +} + +test_trace_save_wrong_num_args +test_trace_save_wrong_opt