Roman Pišl : comctl32/edit: Avoid division by zero in EDIT_EM_LineScroll_internal.
Alexandre Julliard
julliard at winehq.org
Mon Apr 20 15:48:20 CDT 2020
Module: wine
Branch: master
Commit: be1446f56cd82d1c9d3b6ffc31ce71fe54c8c87e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=be1446f56cd82d1c9d3b6ffc31ce71fe54c8c87e
Author: Roman Pišl <rpisl at seznam.cz>
Date: Mon Apr 20 12:20:14 2020 +0200
comctl32/edit: Avoid division by zero in EDIT_EM_LineScroll_internal.
Signed-off-by: Roman Pišl <rpisl at seznam.cz>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/comctl32/edit.c | 8 ++++++--
dlls/comctl32/tests/edit.c | 4 ++++
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/edit.c b/dlls/comctl32/edit.c
index b0c32445b0..4861fd7a9c 100644
--- a/dlls/comctl32/edit.c
+++ b/dlls/comctl32/edit.c
@@ -1579,8 +1579,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/comctl32/tests/edit.c b/dlls/comctl32/tests/edit.c
index 763ade4831..e3b2f40804 100644
--- a/dlls/comctl32/tests/edit.c
+++ b/dlls/comctl32/tests/edit.c
@@ -1790,6 +1790,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;
@@ -1800,6 +1802,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;
}
More information about the wine-cvs
mailing list