2
0
Эх сурвалжийг харах

Prevent infinite loop in Tree incremental search

(cherry picked from commit c0479496faba03d0c3f1d0bf701b8eaab8c92bd7)
Tomasz Chabora 5 жил өмнө
parent
commit
e511e0f16a
1 өөрчлөгдсөн 8 нэмэгдсэн , 0 устгасан
  1. 8 0
      scene/gui/tree.cpp

+ 8 - 0
scene/gui/tree.cpp

@@ -3597,6 +3597,8 @@ void Tree::scroll_to_item(TreeItem *p_item) {
 TreeItem *Tree::_search_item_text(TreeItem *p_at, const String &p_find, int *r_col, bool p_selectable, bool p_backwards) {
 
 	TreeItem *from = p_at;
+	TreeItem *loop = nullptr; // Safe-guard against infinite loop.
+
 	while (p_at) {
 
 		for (int i = 0; i < columns.size(); i++) {
@@ -3614,6 +3616,12 @@ TreeItem *Tree::_search_item_text(TreeItem *p_at, const String &p_find, int *r_c
 
 		if ((p_at) == from)
 			break;
+
+		if (!loop) {
+			loop = p_at;
+		} else if (loop == p_at) {
+			break;
+		}
 	}
 
 	return NULL;