Author: teemperor Date: Tue Sep 5 05:41:00 2017 New Revision: 312533 URL: http://llvm.org/viewvc/llvm-project?rev=312533&view=rev Log: [Bash-autocomplete] Fix crash when invoking --autocomplete without value.
Summary: Currently clang segfaults when invoked with `clang --autocomplete=`. This patch adds the necessary boundary checks and some tests for corner cases like this. Reviewers: yamaguchi Reviewed By: yamaguchi Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D37465 Modified: cfe/trunk/lib/Driver/Driver.cpp cfe/trunk/test/Driver/autocomplete.c Modified: cfe/trunk/lib/Driver/Driver.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=312533&r1=312532&r2=312533&view=diff ============================================================================== --- cfe/trunk/lib/Driver/Driver.cpp (original) +++ cfe/trunk/lib/Driver/Driver.cpp Tue Sep 5 05:41:00 2017 @@ -1165,12 +1165,10 @@ void Driver::handleAutocompletions(Strin unsigned short DisableFlags = options::NoDriverOption | options::Unsupported | options::Ignored; // We want to show cc1-only options only when clang is invoked as "clang - // -cc1". - // When clang is invoked as "clang -cc1", we add "#" to the beginning of an - // --autocomplete - // option so that the clang driver can distinguish whether it is requested to - // show cc1-only options or not. - if (PassedFlags[0] == '#') { + // -cc1". When clang is invoked as "clang -cc1", we add "#" to the beginning + // of an --autocomplete option so that the clang driver can distinguish + // whether it is requested to show cc1-only options or not. + if (PassedFlags.size() > 0 && PassedFlags[0] == '#') { DisableFlags &= ~options::NoDriverOption; PassedFlags = PassedFlags.substr(1); } Modified: cfe/trunk/test/Driver/autocomplete.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/autocomplete.c?rev=312533&r1=312532&r2=312533&view=diff ============================================================================== --- cfe/trunk/test/Driver/autocomplete.c (original) +++ cfe/trunk/test/Driver/autocomplete.c Tue Sep 5 05:41:00 2017 @@ -2,6 +2,19 @@ // autocompletion. You may have to update tests in this file when you // add/modify flags, change HelpTexts or the values of some flags. +// Some corner cases. +// RUN: %clang --autocomplete= | FileCheck %s -check-prefix=ALL_FLAGS +// RUN: %clang --autocomplete=# | FileCheck %s -check-prefix=ALL_FLAGS +// Let's pick some example flags that are hopefully unlikely to change. +// ALL_FLAGS: -fast +// ALL_FLAGS: -fastcp +// ALL_FLAGS: -fastf +// Just test that this doesn't crash: +// RUN: %clang --autocomplete=, +// RUN: %clang --autocomplete== +// RUN: %clang --autocomplete=,, +// RUN: %clang --autocomplete=- + // RUN: %clang --autocomplete=-fsyn | FileCheck %s -check-prefix=FSYN // FSYN: -fsyntax-only // RUN: %clang --autocomplete=-std= | FileCheck %s -check-prefix=STD _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits