From 339e3fa8805f7c9411bf6e6df8d295b91b5a72a5 Mon Sep 17 00:00:00 2001 From: zufuliu Date: Thu, 21 Mar 2024 18:10:45 +0800 Subject: [PATCH] Fix crash due to incorrect IME document feed, issue #775. See https://sourceforge.net/p/scintilla/bugs/2433/ --- scintilla/win32/ScintillaWin.cxx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scintilla/win32/ScintillaWin.cxx b/scintilla/win32/ScintillaWin.cxx index 2f7185b808..4490dca408 100644 --- a/scintilla/win32/ScintillaWin.cxx +++ b/scintilla/win32/ScintillaWin.cxx @@ -3438,9 +3438,14 @@ LRESULT ScintillaWin::ImeOnDocumentFeed(LPARAM lParam) const { return 0; } - const DWORD compStrLen = imc.GetCompositionStringLength(GCS_COMPSTR); - const int imeCaretPos = imc.GetImeCaretPos(); - const Sci::Position compStart = pdoc->GetRelativePositionUTF16(curPos, -imeCaretPos); + DWORD compStrLen = 0; + Sci::Position compStart = curPos; + if (pdoc->TentativeActive()) { + // rcFeed contains current composition string + compStrLen = imc.GetCompositionStringLength(GCS_COMPSTR); + const int imeCaretPos = imc.GetImeCaretPos(); + compStart = pdoc->GetRelativePositionUTF16(curPos, -imeCaretPos); + } const Sci::Position compStrOffset = pdoc->CountUTF16(lineStart, compStart); // Fill in reconvert structure.