From e511e0f16ac12c131ccb44584e127d1741b1e81e Mon Sep 17 00:00:00 2001 From: Tomasz Chabora Date: Mon, 20 Jul 2020 00:53:46 +0200 Subject: [PATCH] Prevent infinite loop in Tree incremental search (cherry picked from commit c0479496faba03d0c3f1d0bf701b8eaab8c92bd7) --- scene/gui/tree.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 0aca928625b..db6a28c73fc 100644 --- a/scene/gui/tree.cpp +++ b/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;