From 590eedeb464b6a1b37ec249394522af83e725b91 Mon Sep 17 00:00:00 2001 From: Raizo62 Date: Wed, 4 Mar 2026 14:26:52 +0100 Subject: [PATCH] Fix QEMU serial console artifacts by filtering ANSI CPR responses in telnet proxy - filter incoming cursor position report sequences (`ESC[;R`) in `AsyncioTelnetServer` - prevent stray `;1R;80R` characters on late telnet console attach after VM boot - keep QEMU serial transport unchanged (`-serial telnet`) for BIOS compatibility --- gns3server/utils/asyncio/telnet_server.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/gns3server/utils/asyncio/telnet_server.py b/gns3server/utils/asyncio/telnet_server.py index b13c405cd..092b8605a 100644 --- a/gns3server/utils/asyncio/telnet_server.py +++ b/gns3server/utils/asyncio/telnet_server.py @@ -20,6 +20,7 @@ import socket import asyncio import asyncio.subprocess import struct +import re import logging log = logging.getLogger(__name__) @@ -57,6 +58,7 @@ NAWS = 31 # Negotiate About Window Size LINEMO = 34 # Line Mode READ_SIZE = 1024 +CPR_RESPONSE = re.compile(br"\x1b\[[0-9]{1,4}(;[0-9]{1,4})?R") class TelnetConnection(object): @@ -286,6 +288,11 @@ class AsyncioTelnetServer: if IAC in data: data = await self._IAC_parser(data, network_reader, network_writer, connection) + # Some terminal clients may send ANSI cursor position reports + # (e.g. ESC[1;80R) when attaching to a serial console. Those + # responses can show up as spurious characters at the shell prompt. + data = CPR_RESPONSE.sub(b"", data) + if len(data) == 0: continue