[clangd] Harden clangd a bit against garbage input.

There can be nullptrs here if the YAML fails to parse. Found by
clangd-fuzzer!

llvm-svn: 316770
This commit is contained in:
Benjamin Kramer 2017-10-27 16:33:15 +00:00
parent cc6ea8e74f
commit decd8a702a
1 changed files with 3 additions and 6 deletions

View File

@ -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;