From f04d8a270e903a4772cdc39107a5aba5d1cb32ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Pi=C5=A1l?= Date: Mon, 20 Apr 2020 12:20:15 +0200 Subject: [PATCH] user32/edit: Avoid division by zero in EDIT_EM_LineScroll_internal. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Roman Pišl Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/user32/edit.c | 8 ++++++-- dlls/user32/tests/edit.c | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c index aba6a084a2c..683c2faea3c 100644 --- a/dlls/user32/edit.c +++ b/dlls/user32/edit.c @@ -1674,8 +1674,12 @@ static BOOL EDIT_EM_LineScroll_internal(EDITSTATE *es, INT dx, INT dy) { INT nyoff; INT x_offset_in_pixels; - INT lines_per_page = (es->format_rect.bottom - es->format_rect.top) / - es->line_height; + INT lines_per_page; + + if (!es->line_height || !es->char_width) + return TRUE; + + lines_per_page = (es->format_rect.bottom - es->format_rect.top) / es->line_height; if (es->style & ES_MULTILINE) { diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c index 2289bbf03fe..34bb1e5a76e 100644 --- a/dlls/user32/tests/edit.c +++ b/dlls/user32/tests/edit.c @@ -1765,6 +1765,8 @@ static LRESULT CALLBACK test_class_proc(HWND hwnd, UINT message, WPARAM wParam, ok(r == 1, "Returned %ld, expected 1.\n", r); r = SendMessageA(hwnd, WM_SIZE, 0, 0x00100010); todo_wine ok(r == 1, "Returned %ld, expected 1.\n", r); + r = SendMessageA(hwnd, EM_LINESCROLL, 1, 1); + ok(r == 1, "Returned %ld, expected 1.\n", r); return result; @@ -1775,6 +1777,8 @@ static LRESULT CALLBACK test_class_proc(HWND hwnd, UINT message, WPARAM wParam, ok(r == 1, "Returned %ld, expected 1.\n", r); r = SendMessageA(hwnd, WM_SIZE, 0, 0x00100010); todo_wine ok(r == 1, "Returned %ld, expected 1.\n", r); + r = SendMessageA(hwnd, EM_LINESCROLL, 1, 1); + ok(r == 1, "Returned %ld, expected 1.\n", r); break; }