llvm-symbolizer: Don't crash when referencing an invalid CU in a dwp file twice
authorDavid Blaikie <dblaikie@gmail.com>
Tue, 14 Mar 2023 00:49:32 +0000 (00:49 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Tue, 14 Mar 2023 00:49:32 +0000 (00:49 +0000)
Previously we'd stash a null pointer in a sorted vector of CUs - the
next time around, we'd try to do a binary search in that vector (sorting
on a key inside the objects pointed to by the elements of the vector)
which would deref null if we'd stashed a null in there previously.

As a reasonable, but not ideal, workaround - don't stash any result in
the vector - this means every query will produce a new warning
(resulting in duplicate warnings) but better than a crash.

Stashing null in the list could be workable if we also stashed the
offset in a pair - but then all the clients would need to be fixed up
(maybe using a filtering iterator) which seems like overkill for this
uncommon error case.

llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp

index c199e01..2fc26fd 100644 (file)
@@ -176,7 +176,7 @@ DWARFUnitVector::getUnitForIndexEntry(const DWARFUnitIndex::Entry &E) {
 
   auto U = Parser(Offset, DW_SECT_INFO, nullptr, &E);
   if (!U)
-    U = nullptr;
+    return nullptr;
 
   auto *NewCU = U.get();
   this->insert(CU, std::move(U));