summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <rverschelde@gmail.com>2020-07-20 13:51:07 +0200
committerGitHub <noreply@github.com>2020-07-20 13:51:07 +0200
commit474333e9a01ac6a14fefb44f02cd36c40d8bb51a (patch)
tree0c354bc650527fd384a1224d056800495d5c6f4d
parentb62db93ba4d95cac8401a49a044ecbec9b7fea21 (diff)
parentc0479496faba03d0c3f1d0bf701b8eaab8c92bd7 (diff)
Merge pull request #40524 from KoBeWi/loop_destroyer
Prevent infinite loop in Tree incremental search
-rw-r--r--scene/gui/tree.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 47761d724e..eeb7f9430d 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -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 *from = p_at;
+ TreeItem *loop = nullptr; // Safe-guard against infinite loop.
+
while (p_at) {
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))) {
@@ -3438,6 +3440,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 nullptr;