From 1f0149e5a605356f93fd515c19940d1a25c0bb6a Mon Sep 17 00:00:00 2001 From: hanaa12G Date: Sat, 18 Nov 2023 10:26:46 +0700 Subject: [PATCH] LibLine: Reset state after invalid character in DSR response While parsing DSR response, we might encounter invalid characters, for example, when we `cat` a binary file. Previously, we just pushed those characters in `m_incomplete_data` buffer, which worked fine until we didn't get a terminating character. We kept increasing coordinate value and crashed in following assertion. --- Userland/Libraries/LibLine/Editor.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Userland/Libraries/LibLine/Editor.cpp b/Userland/Libraries/LibLine/Editor.cpp index 742732eb1f..4a64d207a2 100644 --- a/Userland/Libraries/LibLine/Editor.cpp +++ b/Userland/Libraries/LibLine/Editor.cpp @@ -2128,14 +2128,17 @@ Result, Editor::Error> Editor::vt_dsr() continue; } m_incomplete_data.append(c); + state = Free; continue; case SawBracket: if (is_ascii_digit(c)) { state = InFirstCoordinate; + coordinate_buffer.clear_with_capacity(); coordinate_buffer.append(c); continue; } m_incomplete_data.append(c); + state = Free; continue; case InFirstCoordinate: if (is_ascii_digit(c)) { @@ -2152,6 +2155,7 @@ Result, Editor::Error> Editor::vt_dsr() continue; } m_incomplete_data.append(c); + state = Free; continue; case SawSemicolon: if (is_ascii_digit(c)) { @@ -2160,6 +2164,7 @@ Result, Editor::Error> Editor::vt_dsr() continue; } m_incomplete_data.append(c); + state = Free; continue; case InSecondCoordinate: if (is_ascii_digit(c)) { @@ -2176,6 +2181,7 @@ Result, Editor::Error> Editor::vt_dsr() continue; } m_incomplete_data.append(c); + state = Free; continue; case SawR: m_incomplete_data.append(c);