Zhiyi Zhang : comctl32/taskdialog: Fix buttons might disappear.

Alexandre Julliard julliard at winehq.org
Mon Jun 25 15:41:50 CDT 2018


Module: wine
Branch: master
Commit: 5d7fa27a2f6349dc460bf83c7d670e2458697f65
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=5d7fa27a2f6349dc460bf83c7d670e2458697f65

Author: Zhiyi Zhang <zzhang at codeweavers.com>
Date:   Sun Jun 17 16:16:57 2018 +0800

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 <zzhang at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 1a5fad1..33fb578 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++;
 




More information about the wine-cvs mailing list