aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2017-10-27 16:33:15 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2017-10-27 16:33:15 +0000
commit130858aa6b190d5220f912da53eeb258a45c0aee (patch)
tree7f86bf44e99d94aec4db239e8c370f835bebf236
parentd5f825bfa672da92767d1ef907e45a1cc625b1ca (diff)
[clangd] Harden clangd a bit against garbage input.
There can be nullptrs here if the YAML fails to parse. Found by clangd-fuzzer! git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@316770 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--clangd/JSONRPCDispatcher.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/clangd/JSONRPCDispatcher.cpp b/clangd/JSONRPCDispatcher.cpp
index 7e0aea5f..5e48a071 100644
--- a/clangd/JSONRPCDispatcher.cpp
+++ b/clangd/JSONRPCDispatcher.cpp
@@ -88,11 +88,7 @@ bool JSONRPCDispatcher::call(StringRef Content, JSONOutput &Out) const {
if (Doc == YAMLStream.end())
return false;
- auto *Root = Doc->getRoot();
- if (!Root)
- return false;
-
- auto *Object = dyn_cast<llvm::yaml::MappingNode>(Root);
+ auto *Object = dyn_cast_or_null<llvm::yaml::MappingNode>(Doc->getRoot());
if (!Object)
return false;
@@ -101,7 +97,8 @@ bool JSONRPCDispatcher::call(StringRef Content, JSONOutput &Out) const {
llvm::yaml::MappingNode *Params = nullptr;
llvm::yaml::ScalarNode *Id = nullptr;
for (auto &NextKeyValue : *Object) {
- auto *KeyString = dyn_cast<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
+ auto *KeyString =
+ dyn_cast_or_null<llvm::yaml::ScalarNode>(NextKeyValue.getKey());
if (!KeyString)
return false;