src/theme.c: fix misuse of wl_list_for_each

The iterator value of `wl_list_for_each` should never be referenced
outside the loop because it points to invalid memory location when the
list is empty.
This commit is contained in:
tokyo4j 2024-10-14 07:55:15 +09:00 committed by Johan Malm
parent 1934d0bf09
commit 5f3600b0b8

View file

@ -297,29 +297,30 @@ load_button(struct theme *theme, struct button *b, int active)
buttons[b->type][non_hover_state_set]);
}
struct title_button *leftmost_button = NULL;
wl_list_for_each(leftmost_button,
&rc.title_buttons_left, link) {
break;
}
struct title_button *rightmost_button = NULL;
wl_list_for_each_reverse(rightmost_button,
&rc.title_buttons_right, link) {
break;
}
/*
* If the loaded button is at the corner of the titlebar, also create
* rounded variants.
*/
uint8_t rounded_state_set = b->state_set | LAB_BS_ROUNDED;
if (leftmost_button && leftmost_button->type == b->type) {
struct title_button *leftmost_button;
wl_list_for_each(leftmost_button,
&rc.title_buttons_left, link) {
if (leftmost_button->type == b->type) {
create_rounded_buffer(theme, LAB_CORNER_TOP_LEFT,
&buttons[b->type][rounded_state_set], *buffer);
} else if (rightmost_button && rightmost_button->type == b->type) {
}
break;
}
struct title_button *rightmost_button;
wl_list_for_each_reverse(rightmost_button,
&rc.title_buttons_right, link) {
if (rightmost_button->type == b->type) {
create_rounded_buffer(theme, LAB_CORNER_TOP_RIGHT,
&buttons[b->type][rounded_state_set], *buffer);
}
break;
}
}
/*