Author: d0k Date: Fri Oct 27 09:33:15 2017 New Revision: 316770 URL: http://llvm.org/viewvc/llvm-project?rev=316770&view=rev Log: [clangd] Harden clangd a bit against garbage input.
There can be nullptrs here if the YAML fails to parse. Found by clangd-fuzzer! Modified: clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp Modified: clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp?rev=316770&r1=316769&r2=316770&view=diff ============================================================================== --- clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp (original) +++ clang-tools-extra/trunk/clangd/JSONRPCDispatcher.cpp Fri Oct 27 09:33:15 2017 @@ -88,11 +88,7 @@ bool JSONRPCDispatcher::call(StringRef C 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 C 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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits