[clang-doc] Add check for pointer validity
authorPaul Kirth <paulkirth@google.com>
Fri, 22 Jul 2022 17:34:58 +0000 (17:34 +0000)
committerPaul Kirth <paulkirth@google.com>
Fri, 22 Jul 2022 17:36:30 +0000 (17:36 +0000)
clang-doc would SEGV when running over the Fuchsia code base.
This patch adds a check to avoid dereferencing potentially null pointers
in the Values vector. These pointers were either never valid or had been
invalidated when the underlying pointer in std::unique_ptr was moved from,
hence making it nullptr within the vector.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D130279

clang-tools-extra/clang-doc/Representation.cpp

index 8c619d2a09632be530036718e839a77dc79d4b9b..0a78d8c190db984700b2ba17c041cbb8288d0393 100644 (file)
@@ -33,7 +33,7 @@ const SymbolID EmptySID = SymbolID();
 template <typename T>
 llvm::Expected<std::unique_ptr<Info>>
 reduce(std::vector<std::unique_ptr<Info>> &Values) {
-  if (Values.empty())
+  if (Values.empty() || !Values[0])
     return llvm::createStringError(llvm::inconvertibleErrorCode(),
                                    "no value to reduce");
   std::unique_ptr<Info> Merged = std::make_unique<T>(Values[0]->USR);
@@ -95,7 +95,7 @@ void reduceChildren(std::vector<EnumInfo> &Children,
 // Dispatch function.
 llvm::Expected<std::unique_ptr<Info>>
 mergeInfos(std::vector<std::unique_ptr<Info>> &Values) {
-  if (Values.empty())
+  if (Values.empty() || !Values[0])
     return llvm::createStringError(llvm::inconvertibleErrorCode(),
                                    "no info values to merge");