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,6 +421,7 @@ 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);
if (icon) {
cairo_surface_t *icon_scaled = cairo_surface_t *icon_scaled =
cairo_image_surface_scale(icon, size, size); cairo_image_surface_scale(icon, size, size);
cairo_surface_destroy(icon); cairo_surface_destroy(icon);
@ -431,6 +432,7 @@ static void draw_menu_items(cairo_t *cairo, struct swaybar_dbusmenu_menu *menu,
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);
cairo_set_source_surface(cairo, icon, x, y); cairo_set_source_surface(cairo, icon, x, y);