Browse Source

Fix editor infinit loop in search_prev

Fixes godotengine#31328
amakarenko 6 years ago
parent
commit
544c39d1e7
2 changed files with 9 additions and 8 deletions
  1. 6 8
      editor/code_editor.cpp
  2. 3 0
      scene/gui/text_edit.cpp

+ 6 - 8
editor/code_editor.cpp

@@ -366,14 +366,12 @@ bool FindReplaceBar::search_prev() {
 	if (text_edit->is_selection_active())
 		col--; // Skip currently selected word.
 
-	if (line == result_line && col == result_col) {
-		col -= text.length();
-		if (col < 0) {
-			line -= 1;
-			if (line < 0)
-				line = text_edit->get_line_count() - 1;
-			col = text_edit->get_line(line).length();
-		}
+	col -= text.length();
+	if (col < 0) {
+		line -= 1;
+		if (line < 0)
+			line = text_edit->get_line_count() - 1;
+		col = text_edit->get_line(line).length();
 	}
 
 	return _search(flags, line, col);

+ 3 - 0
scene/gui/text_edit.cpp

@@ -5365,6 +5365,9 @@ bool TextEdit::search(const String &p_key, uint32_t p_search_flags, int p_from_l
 						break;
 					}
 					pos_from = last_pos - p_key.length();
+					if (pos_from < 0) {
+						break;
+					}
 				}
 			} else {
 				while ((last_pos = (p_search_flags & SEARCH_MATCH_CASE) ? text_line.find(p_key, pos_from) : text_line.findn(p_key, pos_from)) != -1) {