From 68b9018d50b7ef2d74c08a2562e8b670731f777f Mon Sep 17 00:00:00 2001 From: Jactry Zeng Date: Tue, 22 Jul 2014 00:40:48 +0800 Subject: [PATCH] riched20: Fix ME_SetSelection when cpMax > strlen(). --- dlls/riched20/caret.c | 13 ++++++++++++- dlls/riched20/tests/editor.c | 14 ++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/dlls/riched20/caret.c b/dlls/riched20/caret.c index 90b30a2f576..043a32a0d64 100644 --- a/dlls/riched20/caret.c +++ b/dlls/riched20/caret.c @@ -139,6 +139,7 @@ int ME_SetSelection(ME_TextEditor *editor, int from, int to) { ME_SetCursorToStart(editor, &editor->pCursors[1]); ME_SetCursorToEnd(editor, &editor->pCursors[0]); + editor->pCursors[0].nOffset = editor->pCursors[0].pRun->member.run.len; ME_InvalidateSelection(editor); return len + 1; } @@ -159,6 +160,11 @@ int ME_SetSelection(ME_TextEditor *editor, int from, int to) ME_GetSelectionOfs(editor, &start, &end); if (start != end) { + if (end > len) + { + editor->pCursors[0].nOffset = 0; + end --; + } editor->pCursors[1] = editor->pCursors[0]; ME_Repaint(editor); } @@ -200,7 +206,12 @@ int ME_SetSelection(ME_TextEditor *editor, int from, int to) if (editor->pCursors[1].pRun->member.run.nFlags & MERF_ENDPARA) editor->pCursors[1].nOffset = 0; if (editor->pCursors[0].pRun->member.run.nFlags & MERF_ENDPARA) - editor->pCursors[0].nOffset = 0; + { + if (to > len) + editor->pCursors[0].nOffset = editor->pCursors[0].pRun->member.run.len; + else + editor->pCursors[0].nOffset = 0; + } return to; } diff --git a/dlls/riched20/tests/editor.c b/dlls/riched20/tests/editor.c index 3bd3ec0e2cc..5ad063e230b 100644 --- a/dlls/riched20/tests/editor.c +++ b/dlls/riched20/tests/editor.c @@ -4363,7 +4363,9 @@ const struct exsetsel_s exsetsel_tests[] = { {5, 10, 10, 5, 10, 0}, {15, 17, 17, 15, 17, 0}, /* test cpMax > strlen() */ - {0, 100, 18, 0, 18, 1}, + {0, 100, 18, 0, 18, 0}, + /* test cpMin < 0 && cpMax >= 0 after cpMax > strlen() */ + {-1, 1, 17, 17, 17, 0}, /* test cpMin == cpMax */ {5, 5, 5, 5, 5, 0}, /* test cpMin < 0 && cpMax >= 0 (bug 4462) */ @@ -4373,13 +4375,13 @@ const struct exsetsel_s exsetsel_tests[] = { /* test cpMin < 0 && cpMax < 0 */ {-1, -1, 17, 17, 17, 0}, {-4, -5, 17, 17, 17, 0}, - /* test cMin >=0 && cpMax < 0 (bug 6814) */ - {0, -1, 18, 0, 18, 1}, - {17, -5, 18, 17, 18, 1}, + /* test cpMin >=0 && cpMax < 0 (bug 6814) */ + {0, -1, 18, 0, 18, 0}, + {17, -5, 18, 17, 18, 0}, {18, -3, 17, 17, 17, 0}, /* test if cpMin > cpMax */ - {15, 19, 18, 15, 18, 1}, - {19, 15, 18, 15, 18, 1} + {15, 19, 18, 15, 18, 0}, + {19, 15, 18, 15, 18, 0}, }; static void check_EM_EXSETSEL(HWND hwnd, const struct exsetsel_s *setsel, int id) { -- 2.11.4.GIT