From e1894cf97cc1f264ad3469e06f122cd8d995c3c8 Mon Sep 17 00:00:00 2001 From: Johnny Chen Date: Thu, 11 Aug 2011 01:19:46 +0000 Subject: 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 --- lldb/scripts/Python/modify-python-lldb.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lldb/scripts/Python/modify-python-lldb.py') diff --git a/lldb/scripts/Python/modify-python-lldb.py b/lldb/scripts/Python/modify-python-lldb.py index a6e86c2..3825090 100644 --- a/lldb/scripts/Python/modify-python-lldb.py +++ b/lldb/scripts/Python/modify-python-lldb.py @@ -112,6 +112,8 @@ linked_list_iter_def = ''' end-of-list test function which takes an SBValue for an item and returns True if EOL is reached and False if not. + linked_list_iter() also detects infinite loop and bails out early. + The end_of_list_test arg, if omitted, defaults to the __eol_test__ function above. @@ -130,8 +132,10 @@ linked_list_iter_def = ''' if end_of_list_test(self): return item = self + visited = set() try: - while not end_of_list_test(item): + while not end_of_list_test(item) and not item.GetValueAsUnsigned() in visited: + visited.add(item.GetValueAsUnsigned()) yield item # Prepare for the next iteration. item = item.GetChildMemberWithName(next_item_name) -- cgit v1.1