From a6947c624c6557369fff79a8bfab1940e7b022fb Mon Sep 17 00:00:00 2001 From: Pierre-Louis Bossart Date: Thu, 19 Jan 2017 15:06:29 -0600 Subject: tinymix: fix segfaults with set command The arguments passed after the set command are not handled properly, leading to segfaults or inability to set controls Example with control 0 which is Headset Volume on my NUC: before fix $ ./tinymix set 0 Segmentation fault $ ./tinymix set 0 10 Segmentation fault $ ./tinymix set 0 10 20 Error: 3 values given, but control only takes 2 After correction $ ./tinymix set 0 no value(s) specified $ ./tinymix set 0 10 $ ./tinymix set 0 10 10 $ ./tinymix set 0 10 10 10 Error: 3 values given, but control only takes 2 Signed-off-by: Pierre-Louis Bossart --- utils/tinymix.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'utils') diff --git a/utils/tinymix.c b/utils/tinymix.c index a7e7c05..3f733ba 100644 --- a/utils/tinymix.c +++ b/utils/tinymix.c @@ -124,7 +124,12 @@ int main(int argc, char **argv) mixer_close(mixer); return EXIT_FAILURE; } - tinymix_set_value(mixer, argv[optind + 1], &argv[optind + 2], argc - 2); + if ((optind + 2) >= argc) { + fprintf(stderr, "no value(s) specified\n"); + mixer_close(mixer); + return EXIT_FAILURE; + } + tinymix_set_value(mixer, argv[optind + 1], &argv[optind + 2], argc - 3); } else if (strcmp(cmd, "controls") == 0) { tinymix_list_controls(mixer, 0); } else if (strcmp(cmd, "contents") == 0) { -- cgit v1.2.3