fix(swaybar/dbusmenu): fix null pointer dereference when loading icons

This change adds a null check when loading icons in the dbusmenu
code to avoid a segmentation fault when the icon surface fails to load.
This commit is contained in:
Vladimir Panteleev 2026-01-10 13:02:57 +00:00 committed by blinxen
parent 9e035e0277
commit 2508a1d019

View file

@ -421,15 +421,17 @@ static void draw_menu_items(cairo_t *cairo, struct swaybar_dbusmenu_menu *menu,
if (icon_path) { if (icon_path) {
cairo_surface_t *icon = load_image(icon_path); cairo_surface_t *icon = load_image(icon_path);
free(icon_path); free(icon_path);
cairo_surface_t *icon_scaled = if (icon) {
cairo_image_surface_scale(icon, size, size); cairo_surface_t *icon_scaled =
cairo_surface_destroy(icon); cairo_image_surface_scale(icon, size, size);
cairo_surface_destroy(icon);
cairo_set_source_surface(cairo, icon_scaled, x, y); cairo_set_source_surface(cairo, icon_scaled, x, y);
cairo_rectangle(cairo, x, y, size, size); cairo_rectangle(cairo, x, y, size, size);
cairo_fill(cairo); cairo_fill(cairo);
cairo_surface_destroy(icon_scaled); cairo_surface_destroy(icon_scaled);
is_icon_drawn = true; is_icon_drawn = true;
}
} }
} else if (item->icon_data) { } else if (item->icon_data) {
cairo_surface_t *icon = cairo_image_surface_scale(item->icon_data, size, size); cairo_surface_t *icon = cairo_image_surface_scale(item->icon_data, size, size);