From decd8a702a679813d31bd4daac6c16be42872dd6 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Fri, 27 Oct 2017 16:33:15 +0000 Subject: [PATCH] [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 --- clang-tools-extra/clangd/JSONRPCDispatcher.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp b/clang-tools-extra/clangd/JSONRPCDispatcher.cpp index 7e0aea5..5e48a07 100644 --- a/clang-tools-extra/clangd/JSONRPCDispatcher.cpp +++ b/clang-tools-extra/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(Root); + auto *Object = dyn_cast_or_null(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(NextKeyValue.getKey()); + auto *KeyString = + dyn_cast_or_null(NextKeyValue.getKey()); if (!KeyString) return false; -- 2.7.4