[Lldb-commits] [PATCH] D49949: Add missing boundary checks to variable completion.
Raphael Isemann via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Jul 27 16:28:34 PDT 2018
teemperor created this revision.
Stopgap patch to at least stop all the crashes I get from this code.
https://reviews.llvm.org/D49949
Files:
packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
packages/Python/lldbsuite/test/functionalities/completion/main.cpp
source/Symbol/Variable.cpp
Index: source/Symbol/Variable.cpp
===================================================================
--- source/Symbol/Variable.cpp
+++ source/Symbol/Variable.cpp
@@ -644,11 +644,11 @@
break;
case '-':
- if (partial_path[1] == '>' && !prefix_path.str().empty()) {
+ if (partial_path.size() > 1 && partial_path[1] == '>' && !prefix_path.str().empty()) {
switch (type_class) {
case lldb::eTypeClassPointer: {
CompilerType pointee_type(compiler_type.GetPointeeType());
- if (partial_path[2]) {
+ if (partial_path.size() > 2 && partial_path[2]) {
// If there is more after the "->", then search deeper
PrivateAutoComplete(
frame, partial_path.substr(2), prefix_path + "->",
@@ -672,7 +672,7 @@
case lldb::eTypeClassUnion:
case lldb::eTypeClassStruct:
case lldb::eTypeClassClass:
- if (partial_path[1]) {
+ if (partial_path.size() > 1 && partial_path[1]) {
// If there is more after the ".", then search deeper
PrivateAutoComplete(frame, partial_path.substr(1),
prefix_path + ".", compiler_type, matches,
Index: packages/Python/lldbsuite/test/functionalities/completion/main.cpp
===================================================================
--- packages/Python/lldbsuite/test/functionalities/completion/main.cpp
+++ packages/Python/lldbsuite/test/functionalities/completion/main.cpp
@@ -7,8 +7,15 @@
}
};
+struct Container { int MemberVar; };
+
int main()
{
- Foo f;
- f.Bar(1, 2);
+ Foo fooo;
+ Foo *ptr_fooo = &fooo;
+ fooo.Bar(1, 2);
+
+ Container container;
+ Container *ptr_container = &container;
+ return container.MemberVar = 3; // Break here
}
Index: packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
===================================================================
--- packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
+++ packages/Python/lldbsuite/test/functionalities/completion/TestCompletion.py
@@ -38,6 +38,35 @@
"""Test that 'de' completes to 'detach '."""
self.complete_from_to('de', 'detach ')
+ @skipIfFreeBSD # timing out on the FreeBSD buildbot
+ def test_frame_variable(self):
+ self.build()
+ self.main_source = "main.cpp"
+ self.main_source_spec = lldb.SBFileSpec(self.main_source)
+ self.dbg.CreateTarget(self.getBuildArtifact("a.out"))
+
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ '// Break here', self.main_source_spec)
+ self.assertEquals(process.GetState(), lldb.eStateStopped)
+ # FIXME: This pulls in the debug information to make the completions work,
+ # but the completions should also work without.
+ self.runCmd("frame variable fooo")
+
+ self.complete_from_to('frame variable fo', 'frame variable fooo')
+ self.complete_from_to('frame variable fooo.', 'frame variable fooo.')
+ self.complete_from_to('frame variable fooo.dd', 'frame variable fooo.dd')
+
+ self.complete_from_to('frame variable ptr_fooo->', 'frame variable ptr_fooo->')
+ self.complete_from_to('frame variable ptr_fooo->dd', 'frame variable ptr_fooo->dd')
+
+ self.complete_from_to('frame variable cont', 'frame variable container')
+ self.complete_from_to('frame variable container.', 'frame variable container.MemberVar')
+ self.complete_from_to('frame variable container.Mem', 'frame variable container.MemberVar')
+
+ self.complete_from_to('frame variable ptr_cont', 'frame variable ptr_container')
+ self.complete_from_to('frame variable ptr_container->', 'frame variable ptr_container->MemberVar')
+ self.complete_from_to('frame variable ptr_container->Mem', 'frame variable ptr_container->MemberVar')
+
@skipIfFreeBSD # timing out on the FreeBSD buildbot
def test_process_attach_dash_dash_con(self):
"""Test that 'process attach --con' completes to 'process attach --continue '."""
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49949.157801.patch
Type: text/x-patch
Size: 4165 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20180727/8f40e80e/attachment.bin>
More information about the lldb-commits
mailing list