Quickshell / notifications : limiter les données natives retenues, pas seulement leur affichage #13

Closed
opened 2026-10-24 13:10:03 +00:00 by mathieu · 1 comment
Owner

Problème confirmé

mathieu/NotificationService.qml:95–114 tronque les copies d’affichage puis conserve sans condition les objets natifs avec notification.tracked = true. Les limites 512/4096 caractères, huit boutons et 100 entrées ne bornent donc pas les octets retenus. Les identifiants d’actions copiés dans les snapshots ne sont pas limités non plus.

Reproduction sur Quickshell 0.3.2, bus D-Bus/HOME temporaires : un corps de 2 097 152 caractères reste complet dans row.notification.body, alors que row.body.length vaut 4096. Un objet non transitoire peut rester actif jusqu’à 24 h. Ce constat est une rétention excessive possible, pas une fuite d’objets fermés démontrée.

Résultat attendu

  • Définir et appliquer des limites de taille totale, corps/résumé, actions, identifiants et données annexes conservées.
  • Contrôler les nouvelles notifications et leurs remplacements ; rejeter ou expirer proprement les objets excessifs.
  • Borner aussi la sérialisation des snapshots et la taille cumulée retenue.
  • Distinguer le contrôle QML de rétention d’un vrai plafond d’allocation à l’entrée native. Si nécessaire, documenter une dépendance/correction amont plutôt que prétendre que les capacités annoncées suffisent.

Validation

  • Gros corps, nombreuses actions, identifiants longs et hints volumineux : refus/expiration déterministes et mémoire retenue bornée.
  • Un remplacement excessif d’un objet déjà accepté ne contourne pas les limites.
  • Aucun archivage involontaire de l’objet rejeté, action périmée ni contenu privé dans les diagnostics.
  • Mesures mémoire avant/après et après fermeture, sur données synthétiques et sans bus personnel.

Articulation

À coordonner avec #12, sans attendre une refonte générale. Conserver les limites 100 entrées/24 h et les sémantiques documentées pour les notifications ordinaires.

Référence

Revue du code au commit 5e350a8, avec Quickshell 0.3.2. Les 18 suites existantes passent ; les cas ci-dessous complètent cette couverture. Chantier : #11.

  • with pi 🥧
## Problème confirmé `mathieu/NotificationService.qml:95–114` tronque les copies d’affichage puis conserve sans condition les objets natifs avec `notification.tracked = true`. Les limites 512/4096 caractères, huit boutons et 100 entrées ne bornent donc pas les octets retenus. Les identifiants d’actions copiés dans les snapshots ne sont pas limités non plus. Reproduction sur Quickshell 0.3.2, bus D-Bus/HOME temporaires : un corps de **2 097 152 caractères** reste complet dans `row.notification.body`, alors que `row.body.length` vaut 4096. Un objet non transitoire peut rester actif jusqu’à 24 h. Ce constat est une rétention excessive possible, **pas une fuite d’objets fermés démontrée**. ## Résultat attendu - Définir et appliquer des limites de taille totale, corps/résumé, actions, identifiants et données annexes conservées. - Contrôler les nouvelles notifications **et** leurs remplacements ; rejeter ou expirer proprement les objets excessifs. - Borner aussi la sérialisation des snapshots et la taille cumulée retenue. - Distinguer le contrôle QML de rétention d’un vrai plafond d’allocation à l’entrée native. Si nécessaire, documenter une dépendance/correction amont plutôt que prétendre que les capacités annoncées suffisent. ## Validation - [x] Gros corps, nombreuses actions, identifiants longs et hints volumineux : refus/expiration déterministes et mémoire retenue bornée. - [x] Un remplacement excessif d’un objet déjà accepté ne contourne pas les limites. - [x] Aucun archivage involontaire de l’objet rejeté, action périmée ni contenu privé dans les diagnostics. - [x] Mesures mémoire avant/après et après fermeture, sur données synthétiques et sans bus personnel. ## Articulation À coordonner avec #12, sans attendre une refonte générale. Conserver les limites 100 entrées/24 h et les sémantiques documentées pour les notifications ordinaires. ## Référence Revue du code [au commit `5e350a8`](https://git.2027a.net/mathieu/dotfiles/src/commit/5e350a8945af99e6e6b1c7f472fb7529a26a1826/quickshell/), avec Quickshell 0.3.2. Les 18 suites existantes passent ; les cas ci-dessous complètent cette couverture. Chantier : #11. - with pi 🥧
Author
Owner

Intégré et publié sur main, contenu distant vérifié au commit 166c763, correction signée b414a5f. Revue indépendante propre ; gate parent : 21/21 suites passent en environnements privés.

Les enveloppes natives, identifiants/actions/hints inspectables et snapshots sont bornés ; un message individuellement valide reste admis, puis les plus anciens sont évincés pour respecter100/24h et la charge cumulée4MiB. Un expéditeur ne peut donc pas remplir une fois le quota et bloquer toutes les applications24h. Les références file:/icônes bornées restent admises ; buffers d’images natifs opaques et hints opaques sont rejetés. Les32 libellés maximum sont observés pour la validation, mais changements cachés valides sans sauvegarde et visibles regroupés en une.

Preuve native rouge : corps65537 unités restait suivi sur ancien code ; vert : expiration/rejet. Nouvelles suites couvrent remplacement invalide/fermeture avant refresh, actions périmées, images et variantes Qt réelles, quota/éviction/autre application, reload et absence d’archive accidentelle. Diagnostics privés compacts, pas de bypass de production.

Mémoire synthétique d’un même processus :40 corps65536 unités =>26 natifs retenus, charge4 132 024octets ; après clear0/0 ; deux cycles de gros corps/images rejetés0/0 et PSS69 965 puis69 969Kio. Ce plateau court n’est pas une preuve d’absence de fuite. La charge4MiB n’est pas un plafond RSS. Allocations/parser/unpacking natifs antérieurs à QML et délai de revalidation coalescée restent explicitement hors garantie ; un plafond d’ingress exige du travail amont.

Aucun reload du checkout actif ni accès aux notifications personnelles. Les limites et leur impact sont dans quickshell/NOTIFICATIONS.md.

  • with pi 🥧
Intégré et publié sur `main`, contenu distant vérifié au commit [166c763](https://git.2027a.net/mathieu/dotfiles/commit/166c763cfadc8f77f0a72ce8d132dbf97252b867), correction signée `b414a5f`. Revue indépendante propre ; gate parent : **21/21 suites passent** en environnements privés. Les enveloppes natives, identifiants/actions/hints inspectables et snapshots sont bornés ; un message individuellement valide reste admis, puis les plus anciens sont évincés pour respecter100/24h et la charge cumulée4MiB. Un expéditeur ne peut donc pas remplir une fois le quota et bloquer toutes les applications24h. Les références file:/icônes bornées restent admises ; buffers d’images natifs opaques et hints opaques sont rejetés. Les32 libellés maximum sont observés pour la validation, mais changements cachés valides sans sauvegarde et visibles regroupés en une. Preuve native rouge : corps65537 unités restait suivi sur ancien code ; vert : expiration/rejet. Nouvelles suites couvrent remplacement invalide/fermeture avant refresh, actions périmées, images et variantes Qt réelles, quota/éviction/autre application, reload et absence d’archive accidentelle. Diagnostics privés compacts, pas de bypass de production. Mémoire synthétique d’un même processus :40 corps65536 unités =>26 natifs retenus, charge4 132 024octets ; après clear0/0 ; deux cycles de gros corps/images rejetés0/0 et PSS69 965 puis69 969Kio. Ce plateau court n’est pas une preuve d’absence de fuite. La charge4MiB n’est **pas** un plafond RSS. Allocations/parser/unpacking natifs antérieurs à QML et délai de revalidation coalescée restent explicitement hors garantie ; un plafond d’ingress exige du travail amont. Aucun reload du checkout actif ni accès aux notifications personnelles. Les limites et leur impact sont dans `quickshell/NOTIFICATIONS.md`. - with pi 🥧
mathieu 2026-10-24 15:00:55 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mathieu/dotfiles#13
No description provided.