[newlib-cygwin] Cygwin: pty: Make ESC sequence parser in pty_master_fwd_thread durable

Takashi Yano via Cygwin-cvs <[email protected]> Fri, 19 Dec 2025 18:29:06 +0000 (GMT)
Newsgroups gmane.os.cygwin.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=a2e8a63c90e3427a4e6f4e5a52754626fdf87599

commit a2e8a63c90e3427a4e6f4e5a52754626fdf87599
Author: Takashi Yano <[email protected]>
Date:   Fri Dec 19 13:19:40 2025 +0900

    Cygwin: pty: Make ESC sequence parser in pty_master_fwd_thread durable
    
    If the ESC comes when the state is not zero due to a broken ESC
    sequence, the second ESC sequence cannot be handled properly.
    With this patch, ESC that come in the middle of another sequence
    make the state machine start parsing new ESC secuence.
    
    Fixes: 10d083c745dd ("Cygwin: pty: Inherit typeahead data between two input pipes.")
    Suggested-by: Johannes Schindelin <[email protected]>
    Signed-off-by: Takashi Yano <[email protected]>

Diff:
---
 winsup/cygwin/fhandler/pty.cc | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/winsup/cygwin/fhandler/pty.cc b/winsup/cygwin/fhandler/pty.cc
index 3b0b4f073..c558b62b2 100644
--- a/winsup/cygwin/fhandler/pty.cc
+++ b/winsup/cygwin/fhandler/pty.cc
@@ -2710,6 +2710,12 @@ fhandler_pty_master::pty_master_fwd_thread (const master_fwd_thread_param_t *p)
 	      }
 	    else if (state == 4)
 	      continue;
+	    else if (outbuf[i] == '\033')
+	      {
+		start_at = i;
+		state = 1;
+		continue;
+	      }
 	    else
 	      {
 		state = 0;
@@ -2772,6 +2778,12 @@ fhandler_pty_master::pty_master_fwd_thread (const master_fwd_thread_param_t *p)
 		i = start_at - 1;
 		continue;
 	      }
+	    else if (outbuf[i] == '\033')
+	      {
+		start_at = i;
+		state = 1;
+		continue;
+	      }
 	    else
 	      state = 0;