From 9533ad790a9b89f67641b91c2897f76e3505dfef Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Fri, 17 Apr 2026 00:59:34 +0900 Subject: [PATCH] [WINSRV] ConioWriteConsole: Modify update rect for CJK (#8859) Correctly displaying Asian characters on Asian Console. JIRA issue: CORE-18972 Modify the update rectangle for Chinese, Japanese, and Korean. --- win32ss/user/winsrv/consrv/frontends/terminal.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/win32ss/user/winsrv/consrv/frontends/terminal.c b/win32ss/user/winsrv/consrv/frontends/terminal.c index ddf8f75af22..25244613843 100644 --- a/win32ss/user/winsrv/consrv/frontends/terminal.c +++ b/win32ss/user/winsrv/consrv/frontends/terminal.c @@ -556,6 +556,8 @@ ConioWriteConsole(PFRONTEND FrontEnd, /* --- BS --- */ else if (Buffer[i] == L'\b') { + INT OldX = Buff->CursorPosition.X; + /* Only handle BS if we are not on the first position of the first line */ if (Buff->CursorPosition.X == 0 && Buff->CursorPosition.Y == 0) continue; @@ -622,8 +624,8 @@ ConioWriteConsole(PFRONTEND FrontEnd, Ptr->Attributes = Buff->ScreenDefaultAttrib; Ptr->Attributes &= ~COMMON_LVB_SBCSDBCS; - UpdateRect.Left = min(UpdateRect.Left , Buff->CursorPosition.X); - UpdateRect.Right = max(UpdateRect.Right, Buff->CursorPosition.X); + UpdateRect.Left = min(min(UpdateRect.Left , Buff->CursorPosition.X), OldX); + UpdateRect.Right = max(max(UpdateRect.Right, Buff->CursorPosition.X), OldX); continue; } /* --- TAB --- */ @@ -778,6 +780,8 @@ ConioWriteConsole(PFRONTEND FrontEnd, Ptr->Attributes = Buff->ScreenDefaultAttrib; Ptr->Attributes &= ~COMMON_LVB_SBCSDBCS; Ptr->Attributes |= COMMON_LVB_TRAILING_BYTE; + + UpdateRect.Right++; } else {