From ac48d334ab3698cfcf07a40305de2d1bce31c2f9 Mon Sep 17 00:00:00 2001 From: Vladimir Testov Date: Tue, 15 Oct 2013 18:16:06 +0400 Subject: [PATCH] * grub-core/gfxmenu/gui_list.c: Scrollbar sanity checks added. --- ChangeLog | 4 ++++ grub-core/gfxmenu/gui_list.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 838cd7a7b..47ea279bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-10-16 Vladimir Testov + + * grub-core/gfxmenu/gui_list.c: Scrollbar sanity checks added. + 2013-10-16 Vladimir Testov * grub-core/gfxmenu/gui_list.c: New option `item_pixmap_style`. diff --git a/grub-core/gfxmenu/gui_list.c b/grub-core/gfxmenu/gui_list.c index ec1a5513f..5f7f47a43 100644 --- a/grub-core/gfxmenu/gui_list.c +++ b/grub-core/gfxmenu/gui_list.c @@ -176,7 +176,34 @@ check_scrollbar (list_impl_t self) self->need_to_recreate_scrollbar = 0; } - return (self->scrollbar_frame != 0 && self->scrollbar_thumb != 0); + if (self->scrollbar_frame == 0 || self->scrollbar_thumb == 0) + return 0; + + /* Sanity checks. */ + grub_gfxmenu_box_t frame = self->scrollbar_frame; + grub_gfxmenu_box_t thumb = self->scrollbar_thumb; + grub_gfxmenu_box_t menu = self->menu_box; + int min_width = frame->get_left_pad (frame) + + frame->get_right_pad (frame); + int min_height = frame->get_top_pad (frame) + + frame->get_bottom_pad (frame) + + self->scrollbar_top_pad + self->scrollbar_bottom_pad + + menu->get_top_pad (menu) + + menu->get_bottom_pad (menu); + if (!self->scrollbar_thumb_overlay) + { + min_width += thumb->get_left_pad (thumb) + + thumb->get_right_pad (thumb); + min_height += thumb->get_top_pad (thumb) + + thumb->get_bottom_pad (thumb); + } + if (min_width <= self->scrollbar_width + && min_height <= (int) self->bounds.height) + return 1; + + /* Unprintable dimenstions. */ + self->draw_scrollbar = 0; + return 0; } static const char *