diff options
author | Miro Bucko <mbucko@meta.com> | 2024-06-21 11:24:48 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-21 11:24:48 -0400 |
commit | a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6 (patch) | |
tree | b8e3d50ec361152b0e4556f777de067464c21f4c | |
parent | 3de162fee44376b3857c73958d656f76b17e50f5 (diff) | |
download | llvm-a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6.zip llvm-a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6.tar.gz llvm-a083e50f53f0f9eb9ad0c5b65f3c627cf97043e6.tar.bz2 |
[lldb] Fix SBAddressRange validation checks. (#95997)
-rw-r--r-- | lldb/include/lldb/API/SBAddressRange.h | 6 | ||||
-rw-r--r-- | lldb/include/lldb/API/SBAddressRangeList.h | 2 | ||||
-rw-r--r-- | lldb/source/API/SBAddressRange.cpp | 29 | ||||
-rw-r--r-- | lldb/source/API/SBAddressRangeList.cpp | 17 | ||||
-rw-r--r-- | lldb/test/API/python_api/address_range/TestAddressRange.py | 2 |
5 files changed, 31 insertions, 25 deletions
diff --git a/lldb/include/lldb/API/SBAddressRange.h b/lldb/include/lldb/API/SBAddressRange.h index 152bd82..5c4d6b8 100644 --- a/lldb/include/lldb/API/SBAddressRange.h +++ b/lldb/include/lldb/API/SBAddressRange.h @@ -11,6 +11,10 @@ #include "lldb/API/SBDefines.h" +namespace lldb_private { +class AddressRange; +} + namespace lldb { class LLDB_API SBAddressRange { @@ -58,6 +62,8 @@ private: friend class SBFunction; friend class SBProcess; + lldb_private::AddressRange &ref() const; + AddressRangeUP m_opaque_up; }; diff --git a/lldb/include/lldb/API/SBAddressRangeList.h b/lldb/include/lldb/API/SBAddressRangeList.h index a123287..5a4eeec 100644 --- a/lldb/include/lldb/API/SBAddressRangeList.h +++ b/lldb/include/lldb/API/SBAddressRangeList.h @@ -46,6 +46,8 @@ private: friend class SBBlock; friend class SBProcess; + lldb_private::AddressRangeListImpl &ref() const; + std::unique_ptr<lldb_private::AddressRangeListImpl> m_opaque_up; }; diff --git a/lldb/source/API/SBAddressRange.cpp b/lldb/source/API/SBAddressRange.cpp index 9b1affd..5834ebe 100644 --- a/lldb/source/API/SBAddressRange.cpp +++ b/lldb/source/API/SBAddressRange.cpp @@ -50,9 +50,7 @@ const SBAddressRange &SBAddressRange::operator=(const SBAddressRange &rhs) { bool SBAddressRange::operator==(const SBAddressRange &rhs) { LLDB_INSTRUMENT_VA(this, rhs); - if (!IsValid() || !rhs.IsValid()) - return false; - return m_opaque_up->operator==(*(rhs.m_opaque_up)); + return ref().operator==(rhs.ref()); } bool SBAddressRange::operator!=(const SBAddressRange &rhs) { @@ -64,40 +62,35 @@ bool SBAddressRange::operator!=(const SBAddressRange &rhs) { void SBAddressRange::Clear() { LLDB_INSTRUMENT_VA(this); - m_opaque_up.reset(); + ref().Clear(); } bool SBAddressRange::IsValid() const { LLDB_INSTRUMENT_VA(this); - return m_opaque_up && m_opaque_up->IsValid(); + return ref().IsValid(); } lldb::SBAddress SBAddressRange::GetBaseAddress() const { LLDB_INSTRUMENT_VA(this); - if (!IsValid()) - return lldb::SBAddress(); - return lldb::SBAddress(m_opaque_up->GetBaseAddress()); + return lldb::SBAddress(ref().GetBaseAddress()); } lldb::addr_t SBAddressRange::GetByteSize() const { LLDB_INSTRUMENT_VA(this); - if (!IsValid()) - return 0; - return m_opaque_up->GetByteSize(); + return ref().GetByteSize(); } bool SBAddressRange::GetDescription(SBStream &description, const SBTarget target) { LLDB_INSTRUMENT_VA(this, description, target); - Stream &stream = description.ref(); - if (!IsValid()) { - stream << "<invalid>"; - return true; - } - m_opaque_up->GetDescription(&stream, target.GetSP().get()); - return true; + return ref().GetDescription(&description.ref(), target.GetSP().get()); +} + +lldb_private::AddressRange &SBAddressRange::ref() const { + assert(m_opaque_up && "opaque pointer must always be valid"); + return *m_opaque_up; } diff --git a/lldb/source/API/SBAddressRangeList.cpp b/lldb/source/API/SBAddressRangeList.cpp index 20660b3..957155d 100644 --- a/lldb/source/API/SBAddressRangeList.cpp +++ b/lldb/source/API/SBAddressRangeList.cpp @@ -37,40 +37,40 @@ SBAddressRangeList::operator=(const SBAddressRangeList &rhs) { LLDB_INSTRUMENT_VA(this, rhs); if (this != &rhs) - *m_opaque_up = *rhs.m_opaque_up; + ref() = rhs.ref(); return *this; } uint32_t SBAddressRangeList::GetSize() const { LLDB_INSTRUMENT_VA(this); - return m_opaque_up->GetSize(); + return ref().GetSize(); } SBAddressRange SBAddressRangeList::GetAddressRangeAtIndex(uint64_t idx) { LLDB_INSTRUMENT_VA(this, idx); SBAddressRange sb_addr_range; - (*sb_addr_range.m_opaque_up) = m_opaque_up->GetAddressRangeAtIndex(idx); + (*sb_addr_range.m_opaque_up) = ref().GetAddressRangeAtIndex(idx); return sb_addr_range; } void SBAddressRangeList::Clear() { LLDB_INSTRUMENT_VA(this); - m_opaque_up->Clear(); + ref().Clear(); } void SBAddressRangeList::Append(const SBAddressRange &sb_addr_range) { LLDB_INSTRUMENT_VA(this, sb_addr_range); - m_opaque_up->Append(*sb_addr_range.m_opaque_up); + ref().Append(*sb_addr_range.m_opaque_up); } void SBAddressRangeList::Append(const SBAddressRangeList &sb_addr_range_list) { LLDB_INSTRUMENT_VA(this, sb_addr_range_list); - m_opaque_up->Append(*sb_addr_range_list.m_opaque_up); + ref().Append(*sb_addr_range_list.m_opaque_up); } bool SBAddressRangeList::GetDescription(SBStream &description, @@ -92,3 +92,8 @@ bool SBAddressRangeList::GetDescription(SBStream &description, stream << "]"; return true; } + +lldb_private::AddressRangeListImpl &SBAddressRangeList::ref() const { + assert(m_opaque_up && "opaque pointer must always be valid"); + return *m_opaque_up; +} diff --git a/lldb/test/API/python_api/address_range/TestAddressRange.py b/lldb/test/API/python_api/address_range/TestAddressRange.py index 86ca4a6..ae4b8c7 100644 --- a/lldb/test/API/python_api/address_range/TestAddressRange.py +++ b/lldb/test/API/python_api/address_range/TestAddressRange.py @@ -166,7 +166,7 @@ class AddressRangeTestCase(TestBase): def test_address_range_print_invalid(self): """Make sure the SBAddressRange can be printed when invalid.""" range = lldb.SBAddressRange() - self.assertEqual(str(range), "<invalid>") + self.assertEqual(str(range), "[0xffffffffffffffff-0xffffffffffffffff)") def test_address_range_print_resolved(self): """Make sure the SBAddressRange can be printed when resolved.""" |