r312533 - [Bash-autocomplete] Fix crash when invoking --autocomplete without value.
Raphael Isemann via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 5 05:41:00 PDT 2017
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
More information about the cfe-commits
mailing list