[llvm] r305229 - Fix a null pointer dereference in llvm-pdbutil pretty.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 12 13:46:36 PDT 2017


Author: zturner
Date: Mon Jun 12 15:46:35 2017
New Revision: 305229

URL: http://llvm.org/viewvc/llvm-project?rev=305229&view=rev
Log:
Fix a null pointer dereference in llvm-pdbutil pretty.

Static data members were causing a problem because I mistakenly
assumed all members would affect a class's layout and so the
Layout member would be non-null.

Modified:
    llvm/trunk/lib/DebugInfo/PDB/UDTLayout.cpp
    llvm/trunk/tools/llvm-pdbutil/PrettyClassLayoutGraphicalDumper.cpp

Modified: llvm/trunk/lib/DebugInfo/PDB/UDTLayout.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/UDTLayout.cpp?rev=305229&r1=305228&r2=305229&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/UDTLayout.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/UDTLayout.cpp Mon Jun 12 15:46:35 2017
@@ -181,13 +181,14 @@ void UDTLayoutBase::initializeChildren(c
       if (Data->getDataKind() == PDB_DataKind::Member)
         Members.push_back(std::move(Data));
       else
-        Other.push_back(std::move(Child));
+        Other.push_back(std::move(Data));
     } else if (auto VT = unique_dyn_cast<PDBSymbolTypeVTable>(Child))
       VTables.push_back(std::move(VT));
     else if (auto Func = unique_dyn_cast<PDBSymbolFunc>(Child))
       Funcs.push_back(std::move(Func));
-    else
+    else {
       Other.push_back(std::move(Child));
+    }
   }
 
   // We don't want to have any re-allocations in the list of bases, so make

Modified: llvm/trunk/tools/llvm-pdbutil/PrettyClassLayoutGraphicalDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/PrettyClassLayoutGraphicalDumper.cpp?rev=305229&r1=305228&r2=305229&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/PrettyClassLayoutGraphicalDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/PrettyClassLayoutGraphicalDumper.cpp Mon Jun 12 15:46:35 2017
@@ -151,21 +151,21 @@ bool PrettyClassLayoutGraphicalDumper::s
 }
 
 void PrettyClassLayoutGraphicalDumper::dump(const PDBSymbolData &Symbol) {
-  assert(CurrentItem != nullptr);
-
-  DataMemberLayoutItem &Layout =
-      static_cast<DataMemberLayoutItem &>(*CurrentItem);
-
   VariableDumper VarDumper(Printer);
   VarDumper.start(Symbol, ClassOffsetZero);
 
-  if (Layout.hasUDTLayout() && shouldRecurse()) {
-    uint32_t ChildOffsetZero = ClassOffsetZero + Layout.getOffsetInParent();
-    Printer.Indent();
-    PrettyClassLayoutGraphicalDumper TypeDumper(Printer, RecursionLevel + 1,
-                                                ChildOffsetZero);
-    TypeDumper.start(Layout.getUDTLayout());
-    Printer.Unindent();
+  if (CurrentItem != nullptr) {
+    DataMemberLayoutItem &Layout =
+        static_cast<DataMemberLayoutItem &>(*CurrentItem);
+
+    if (Layout.hasUDTLayout() && shouldRecurse()) {
+      uint32_t ChildOffsetZero = ClassOffsetZero + Layout.getOffsetInParent();
+      Printer.Indent();
+      PrettyClassLayoutGraphicalDumper TypeDumper(Printer, RecursionLevel + 1,
+                                                  ChildOffsetZero);
+      TypeDumper.start(Layout.getUDTLayout());
+      Printer.Unindent();
+    }
   }
 
   DumpedAnything = true;




More information about the llvm-commits mailing list