diff --git a/Applications/Terminal/Terminal.cpp b/Applications/Terminal/Terminal.cpp index 9140f81edef..6ead0cb05c2 100644 --- a/Applications/Terminal/Terminal.cpp +++ b/Applications/Terminal/Terminal.cpp @@ -87,6 +87,10 @@ void Terminal::Line::set_length(u16 new_length) auto* new_characters = new u8[new_length]; auto* new_attributes = new Attribute[new_length]; memset(new_characters, ' ', new_length); + if (characters && attributes) { + memcpy(new_characters, characters, min(m_length, new_length)); + memcpy(new_attributes, attributes, min(m_length, new_length) * sizeof(Attribute)); + } delete[] characters; delete[] attributes; characters = new_characters; @@ -938,10 +942,10 @@ void Terminal::set_size(u16 columns, u16 rows) m_scroll_region_top = 0; m_scroll_region_bottom = rows - 1; - m_cursor_row = 0; - m_cursor_column = 0; - m_saved_cursor_row = 0; - m_saved_cursor_column = 0; + m_cursor_row = min((int)m_cursor_row, m_rows - 1); + m_cursor_column = min((int)m_cursor_column, m_columns - 1); + m_saved_cursor_row = min((int)m_saved_cursor_row, m_rows - 1); + m_saved_cursor_column = min((int)m_saved_cursor_column, m_columns - 1); m_horizontal_tabs.resize(columns); for (unsigned i = 0; i < columns; ++i) diff --git a/Applications/Terminal/Terminal.h b/Applications/Terminal/Terminal.h index b60f924bbef..48b574ba631 100644 --- a/Applications/Terminal/Terminal.h +++ b/Applications/Terminal/Terminal.h @@ -212,10 +212,10 @@ private: u16 m_columns { 0 }; u16 m_rows { 0 }; - u8 m_cursor_row { 0 }; - u8 m_cursor_column { 0 }; - u8 m_saved_cursor_row { 0 }; - u8 m_saved_cursor_column { 0 }; + u16 m_cursor_row { 0 }; + u16 m_cursor_column { 0 }; + u16 m_saved_cursor_row { 0 }; + u16 m_saved_cursor_column { 0 }; bool m_stomp { false }; bool m_should_beep { false };