From 5d7fa27a2f6349dc460bf83c7d670e2458697f65 Mon Sep 17 00:00:00 2001 From: Zhiyi Zhang Date: Sun, 17 Jun 2018 16:16:57 +0800 Subject: [PATCH] comctl32/taskdialog: Fix buttons might disappear. In the old button layout algorithm, line count is added before adding button. This cause line count buffer overflow when the first button is very long. Signed-off-by: Zhiyi Zhang Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- dlls/comctl32/taskdialog.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dlls/comctl32/taskdialog.c b/dlls/comctl32/taskdialog.c index 1a5fad1609a..33fb5789103 100644 --- a/dlls/comctl32/taskdialog.c +++ b/dlls/comctl32/taskdialog.c @@ -506,16 +506,15 @@ static void taskdialog_layout(struct taskdialog_info *dialog_info) x = h_spacing; for (i = 0, line_count = 0; i < dialog_info->button_count; i++) { - if (x + button_layout_infos[i].width + h_spacing >= dialog_width) + button_layout_infos[i].line = line_count; + x += button_layout_infos[i].width + h_spacing; + line_widths[line_count] += button_layout_infos[i].width + h_spacing; + + if ((i + 1 < dialog_info->button_count) && (x + button_layout_infos[i + 1].width + h_spacing >= dialog_width)) { x = h_spacing; line_count++; } - - button_layout_infos[i].line = line_count; - - x += button_layout_infos[i].width + h_spacing; - line_widths[line_count] += button_layout_infos[i].width + h_spacing; } line_count++;