summaryrefslogtreecommitdiffstats
path: root/lldb/test/python_api
diff options
context:
space:
mode:
authorJohnny Chen <johnny.chen@apple.com>2011-08-11 01:19:46 +0000
committerJohnny Chen <johnny.chen@apple.com>2011-08-11 01:19:46 +0000
commite1894cf97cc1f264ad3469e06f122cd8d995c3c8 (patch)
treed904f1d89d152a3bbac6c083fb35244f0f5da824 /lldb/test/python_api
parente6d0c86297aef47267262c34696ead2b7928bcd8 (diff)
downloadbcm5719-llvm-e1894cf97cc1f264ad3469e06f122cd8d995c3c8.tar.gz
bcm5719-llvm-e1894cf97cc1f264ad3469e06f122cd8d995c3c8.zip
Add logic to SBValue.linked_list_iter() to detect infinite loop and to bail out early.
Add code to test case to create an evil linked list with: task_evil -> task_2 -> task_3 -> task_evil ... and to check that the linked list iterator only iterates 3 times. llvm-svn: 137291
Diffstat (limited to 'lldb/test/python_api')
-rw-r--r--lldb/test/python_api/value/linked_list/TestValueAPILinkedList.py14
-rw-r--r--lldb/test/python_api/value/linked_list/main.cpp7
2 files changed, 21 insertions, 0 deletions
diff --git a/lldb/test/python_api/value/linked_list/TestValueAPILinkedList.py b/lldb/test/python_api/value/linked_list/TestValueAPILinkedList.py
index f07ed1b1de2..2d820cbfe09 100644
--- a/lldb/test/python_api/value/linked_list/TestValueAPILinkedList.py
+++ b/lldb/test/python_api/value/linked_list/TestValueAPILinkedList.py
@@ -127,6 +127,20 @@ class ValueAsLinkedListTestCase(TestBase):
self.assertTrue(len(list) == 0)
+ # Get variable 'task_evil'.
+ task_evil = frame0.FindVariable('task_evil')
+ self.assertTrue(task_evil, VALID_VARIABLE)
+ self.DebugSBValue(task_evil)
+
+ list = []
+ # There 3 iterable items from task_evil.linked_list_iter(). :-)
+ for t in task_evil.linked_list_iter('next'):
+ if self.TraceOn():
+ print cvf.format(t)
+ list.append(int(t.GetChildMemberWithName("id").GetValue()))
+
+ self.assertTrue(len(list) == 3)
+
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
diff --git a/lldb/test/python_api/value/linked_list/main.cpp b/lldb/test/python_api/value/linked_list/main.cpp
index de812178fdd..50517f48774 100644
--- a/lldb/test/python_api/value/linked_list/main.cpp
+++ b/lldb/test/python_api/value/linked_list/main.cpp
@@ -45,5 +45,12 @@ int main (int argc, char const *argv[])
// This corresponds to an empty task list.
Task *empty_task_head = NULL;
+ Task *task_evil = new Task(1, NULL);
+ Task *task_2 = new Task(2, NULL);
+ Task *task_3 = new Task(3, NULL);
+ task_evil->next = task_2;
+ task_2->next = task_3;
+ task_3->next = task_evil; // In order to cause inifinite loop. :-)
+
return 0; // Break at this line
}
OpenPOWER on IntegriCloud