diff options
| author | Johnny Chen <johnny.chen@apple.com> | 2011-08-11 01:19:46 +0000 |
|---|---|---|
| committer | Johnny Chen <johnny.chen@apple.com> | 2011-08-11 01:19:46 +0000 |
| commit | e1894cf97cc1f264ad3469e06f122cd8d995c3c8 (patch) | |
| tree | d904f1d89d152a3bbac6c083fb35244f0f5da824 /lldb/test/python_api | |
| parent | e6d0c86297aef47267262c34696ead2b7928bcd8 (diff) | |
| download | bcm5719-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.py | 14 | ||||
| -rw-r--r-- | lldb/test/python_api/value/linked_list/main.cpp | 7 |
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 } |

