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

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 19 09:53:39 PDT 2017


Yea, i had put this off because i was planning on adding a test where I
hand constructed a yaml file that would systematically test every possible
symbol. To add a test for this now would require editing some source by
hand, compiling with msvc, and checking in the updated pdb in binary. Do
you think I should just go ahead and do that, or work on the every symbol
test?
On Mon, Jun 19, 2017 at 9:28 AM David Blaikie <dblaikie at gmail.com> wrote:

> Test coverage?
>
> On Mon, Jun 12, 2017 at 1:47 PM Zachary Turner via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> 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;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170619/41ab50fd/attachment.html>


More information about the llvm-commits mailing list