commit 4b1a67fb6ccbb9d434a2be0139c930c2bf3ecf2c
parent db19d5e8cbb0d9cba91bb9183398ae451e0c987b
Author: Vladimir Panteleev <git@cy.md>
Date: Sat, 10 Jan 2026 13:02:57 +0000
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.
Diffstat:
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/swaybar/tray/dbusmenu.c b/swaybar/tray/dbusmenu.c
@@ -421,15 +421,17 @@ static void draw_menu_items(cairo_t *cairo, struct swaybar_dbusmenu_menu *menu,
if (icon_path) {
cairo_surface_t *icon = load_image(icon_path);
free(icon_path);
- cairo_surface_t *icon_scaled =
- cairo_image_surface_scale(icon, size, size);
- cairo_surface_destroy(icon);
-
- cairo_set_source_surface(cairo, icon_scaled, x, y);
- cairo_rectangle(cairo, x, y, size, size);
- cairo_fill(cairo);
- cairo_surface_destroy(icon_scaled);
- is_icon_drawn = true;
+ if (icon) {
+ cairo_surface_t *icon_scaled =
+ cairo_image_surface_scale(icon, size, size);
+ cairo_surface_destroy(icon);
+
+ cairo_set_source_surface(cairo, icon_scaled, x, y);
+ cairo_rectangle(cairo, x, y, size, size);
+ cairo_fill(cairo);
+ cairo_surface_destroy(icon_scaled);
+ is_icon_drawn = true;
+ }
}
} else if (item->icon_data) {
cairo_surface_t *icon = cairo_image_surface_scale(item->icon_data, size, size);