Files
Waybar/include/modules
Alex 66139e4440 fix(tray): stop reorderItems from re-adding items (iterator UAF + double add)
The item-ordering feature made Host::reorderItems() re-run the full
remove/add path over items_ via std::ranges::for_each(on_remove_/on_add_).
This caused two confirmed bugs:

BUG 1 (iterator invalidation / UAF): on_add_ (Tray::onAdd) calls
Host::checkIgnoreList, which erases from items_ while for_each is still
iterating items_, invalidating iterators/pointers. Triggered by a
non-empty ignore-list matching an item with >=2 items present.

BUG 2 (double add): reorderItems runs while an item's Id is resolved in
proxyReady, i.e. before setReady(). It added the not-yet-ready item
(re-parenting its event_box, pushing into Tray::items_, connecting
signal_show/hide), then setReady() -> itemReady -> onAdd added it again:
GTK 'widget already has a parent' critical, duplicate Item* and
signal handlers that accumulated unbounded.

Fixes:
- reorderItems() now only reorders already-added GTK box children via a
  dedicated on_reorder_ callback (Tray::reorderBox), never re-adding or
  removing. reorderBox stable-sorts items_ by order_ and repositions
  children with gtk_box_reorder_child (honouring reverse-direction).
- Tray::onAdd is idempotent (guards against an already-added item) and
  positions the new widget via reorderBox before the ignore-list check.
- signal_show/signal_hide connections are stored per item and
  disconnected in Tray::onRemove; onRemove is a no-op for items that were
  never added.
2026-07-05 10:13:24 +02:00
..
2026-02-04 09:24:14 +01:00
2026-03-30 14:25:41 -07:00
2026-07-04 01:42:35 +02:00
2023-10-15 17:52:12 -03:00
2026-07-03 23:51:45 +02:00
2026-07-03 23:52:02 +02:00
2023-10-17 19:29:06 +02:00
2024-02-19 23:10:10 +01:00
2025-06-22 10:01:36 +02:00
2023-03-02 16:57:32 +03:00
2026-02-04 09:24:14 +01:00
2023-10-17 19:29:06 +02:00
2023-03-02 16:57:32 +03:00
2026-02-04 09:24:14 +01:00
2026-02-04 09:24:14 +01:00
2023-03-02 16:57:32 +03:00