You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-13 13:31:48 +00:00
Prevent infinite loop in Tree incremental search
This commit is contained in:
@@ -3419,6 +3419,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 *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 *from = p_at;
|
||||||
|
TreeItem *loop = nullptr; // Safe-guard against infinite loop.
|
||||||
|
|
||||||
while (p_at) {
|
while (p_at) {
|
||||||
for (int i = 0; i < columns.size(); i++) {
|
for (int i = 0; i < columns.size(); i++) {
|
||||||
if (p_at->get_text(i).findn(p_find) == 0 && (!p_selectable || p_at->is_selectable(i))) {
|
if (p_at->get_text(i).findn(p_find) == 0 && (!p_selectable || p_at->is_selectable(i))) {
|
||||||
@@ -3438,6 +3440,12 @@ TreeItem *Tree::_search_item_text(TreeItem *p_at, const String &p_find, int *r_c
|
|||||||
if ((p_at) == from) {
|
if ((p_at) == from) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!loop) {
|
||||||
|
loop = p_at;
|
||||||
|
} else if (loop == p_at) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user