Skip to content

Commit a083e50

Browse files
authored
[lldb] Fix SBAddressRange validation checks. (#95997)
1 parent 3de162f commit a083e50

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

lldb/include/lldb/API/SBAddressRange.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111

1212
#include "lldb/API/SBDefines.h"
1313

14+
namespace lldb_private {
15+
class AddressRange;
16+
}
17+
1418
namespace lldb {
1519

1620
class LLDB_API SBAddressRange {
@@ -58,6 +62,8 @@ class LLDB_API SBAddressRange {
5862
friend class SBFunction;
5963
friend class SBProcess;
6064

65+
lldb_private::AddressRange &ref() const;
66+
6167
AddressRangeUP m_opaque_up;
6268
};
6369

lldb/include/lldb/API/SBAddressRangeList.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class LLDB_API SBAddressRangeList {
4646
friend class SBBlock;
4747
friend class SBProcess;
4848

49+
lldb_private::AddressRangeListImpl &ref() const;
50+
4951
std::unique_ptr<lldb_private::AddressRangeListImpl> m_opaque_up;
5052
};
5153

lldb/source/API/SBAddressRange.cpp

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,7 @@ const SBAddressRange &SBAddressRange::operator=(const SBAddressRange &rhs) {
5050
bool SBAddressRange::operator==(const SBAddressRange &rhs) {
5151
LLDB_INSTRUMENT_VA(this, rhs);
5252

53-
if (!IsValid() || !rhs.IsValid())
54-
return false;
55-
return m_opaque_up->operator==(*(rhs.m_opaque_up));
53+
return ref().operator==(rhs.ref());
5654
}
5755

5856
bool SBAddressRange::operator!=(const SBAddressRange &rhs) {
@@ -64,40 +62,35 @@ bool SBAddressRange::operator!=(const SBAddressRange &rhs) {
6462
void SBAddressRange::Clear() {
6563
LLDB_INSTRUMENT_VA(this);
6664

67-
m_opaque_up.reset();
65+
ref().Clear();
6866
}
6967

7068
bool SBAddressRange::IsValid() const {
7169
LLDB_INSTRUMENT_VA(this);
7270

73-
return m_opaque_up && m_opaque_up->IsValid();
71+
return ref().IsValid();
7472
}
7573

7674
lldb::SBAddress SBAddressRange::GetBaseAddress() const {
7775
LLDB_INSTRUMENT_VA(this);
7876

79-
if (!IsValid())
80-
return lldb::SBAddress();
81-
return lldb::SBAddress(m_opaque_up->GetBaseAddress());
77+
return lldb::SBAddress(ref().GetBaseAddress());
8278
}
8379

8480
lldb::addr_t SBAddressRange::GetByteSize() const {
8581
LLDB_INSTRUMENT_VA(this);
8682

87-
if (!IsValid())
88-
return 0;
89-
return m_opaque_up->GetByteSize();
83+
return ref().GetByteSize();
9084
}
9185

9286
bool SBAddressRange::GetDescription(SBStream &description,
9387
const SBTarget target) {
9488
LLDB_INSTRUMENT_VA(this, description, target);
9589

96-
Stream &stream = description.ref();
97-
if (!IsValid()) {
98-
stream << "<invalid>";
99-
return true;
100-
}
101-
m_opaque_up->GetDescription(&stream, target.GetSP().get());
102-
return true;
90+
return ref().GetDescription(&description.ref(), target.GetSP().get());
91+
}
92+
93+
lldb_private::AddressRange &SBAddressRange::ref() const {
94+
assert(m_opaque_up && "opaque pointer must always be valid");
95+
return *m_opaque_up;
10396
}

lldb/source/API/SBAddressRangeList.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,40 +37,40 @@ SBAddressRangeList::operator=(const SBAddressRangeList &rhs) {
3737
LLDB_INSTRUMENT_VA(this, rhs);
3838

3939
if (this != &rhs)
40-
*m_opaque_up = *rhs.m_opaque_up;
40+
ref() = rhs.ref();
4141
return *this;
4242
}
4343

4444
uint32_t SBAddressRangeList::GetSize() const {
4545
LLDB_INSTRUMENT_VA(this);
4646

47-
return m_opaque_up->GetSize();
47+
return ref().GetSize();
4848
}
4949

5050
SBAddressRange SBAddressRangeList::GetAddressRangeAtIndex(uint64_t idx) {
5151
LLDB_INSTRUMENT_VA(this, idx);
5252

5353
SBAddressRange sb_addr_range;
54-
(*sb_addr_range.m_opaque_up) = m_opaque_up->GetAddressRangeAtIndex(idx);
54+
(*sb_addr_range.m_opaque_up) = ref().GetAddressRangeAtIndex(idx);
5555
return sb_addr_range;
5656
}
5757

5858
void SBAddressRangeList::Clear() {
5959
LLDB_INSTRUMENT_VA(this);
6060

61-
m_opaque_up->Clear();
61+
ref().Clear();
6262
}
6363

6464
void SBAddressRangeList::Append(const SBAddressRange &sb_addr_range) {
6565
LLDB_INSTRUMENT_VA(this, sb_addr_range);
6666

67-
m_opaque_up->Append(*sb_addr_range.m_opaque_up);
67+
ref().Append(*sb_addr_range.m_opaque_up);
6868
}
6969

7070
void SBAddressRangeList::Append(const SBAddressRangeList &sb_addr_range_list) {
7171
LLDB_INSTRUMENT_VA(this, sb_addr_range_list);
7272

73-
m_opaque_up->Append(*sb_addr_range_list.m_opaque_up);
73+
ref().Append(*sb_addr_range_list.m_opaque_up);
7474
}
7575

7676
bool SBAddressRangeList::GetDescription(SBStream &description,
@@ -92,3 +92,8 @@ bool SBAddressRangeList::GetDescription(SBStream &description,
9292
stream << "]";
9393
return true;
9494
}
95+
96+
lldb_private::AddressRangeListImpl &SBAddressRangeList::ref() const {
97+
assert(m_opaque_up && "opaque pointer must always be valid");
98+
return *m_opaque_up;
99+
}

lldb/test/API/python_api/address_range/TestAddressRange.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def test_address_range_list_iterator(self):
166166
def test_address_range_print_invalid(self):
167167
"""Make sure the SBAddressRange can be printed when invalid."""
168168
range = lldb.SBAddressRange()
169-
self.assertEqual(str(range), "<invalid>")
169+
self.assertEqual(str(range), "[0xffffffffffffffff-0xffffffffffffffff)")
170170

171171
def test_address_range_print_resolved(self):
172172
"""Make sure the SBAddressRange can be printed when resolved."""

0 commit comments

Comments
 (0)