Browse Source

does not fix the bug reported in #4326 and #4818,
but at least make sure it throws and error and does not crash

Juan Linietsky 9 years ago
parent
commit
333de40180
1 changed files with 12 additions and 4 deletions
  1. 12 4
      scene/gui/text_edit.cpp

+ 12 - 4
scene/gui/text_edit.cpp

@@ -3825,12 +3825,16 @@ void TextEdit::undo() {
 	_do_text_op(op, true);
 	current_op.version=op.prev_version;
 	if(undo_stack_pos->get().chain_backward) {
-		do {
+		while(true) {
+			ERR_BREAK(!undo_stack_pos->prev());
 			undo_stack_pos = undo_stack_pos->prev();
 			op = undo_stack_pos->get();
 			_do_text_op(op, true);
 			current_op.version = op.prev_version;
-		} while(!undo_stack_pos->get().chain_forward);
+			if (undo_stack_pos->get().chain_forward) {
+				break;
+			}
+		}
 	}
 
 	cursor_set_line(undo_stack_pos->get().from_line);
@@ -3849,12 +3853,16 @@ void TextEdit::redo() {
 	_do_text_op(op, false);
 	current_op.version = op.version;
 	if(undo_stack_pos->get().chain_forward) {
-		do {
+
+		while(true) {
+			ERR_BREAK(!undo_stack_pos->next());
 			undo_stack_pos=undo_stack_pos->next();
 			op = undo_stack_pos->get();
 			_do_text_op(op, false);
 			current_op.version = op.version;
-		} while(!undo_stack_pos->get().chain_backward);
+			if (undo_stack_pos->get().chain_backward)
+				break;
+		}
 	}
 	cursor_set_line(undo_stack_pos->get().to_line);
 	cursor_set_column(undo_stack_pos->get().to_column);