XMPP: _perAddressCount wordt nooit verlaagd — na 8 device-wissels kan een gebruiker permanent niet meer meedoen #1422
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1422
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bevinding
lib/collab/collab_device_directory.dart— de_perAddressCount-map (regel 74) telt hoeveel distinct device-ids per peer-address zijn opgeslagen. De teller wordt alleen verhoogd (regel 124) bij een nieuw deviceId, en nooit verlaagd — er is geen code die een device verwijdert of de teller decrement.De cap is
perAddressDeviceCap = 8(regel 64). Een gebruiker die 8 keer van device wisselt (bijv. app herinstalleren, nieuwe laptop, browser-tab met nieuwe identiteit) bereikt permanent de cap. Het 9e device wordt geweigerd (regel 118–120):De gebruiker kan niet meer meedoen aan de samenwerking vanaf dat address, ook al zijn de eerste 8 devices allang vertrokken.
Trust boundary
Interne logica — geen externe aanvaller. Een gebruiker die normaal van device wisselt raakt de limiet.
Impact
Na 8 device-rotaties per peer-address is de gebruiker permanent uitgesloten van samenwerking. De teller reset niet bij sessie-einde (de directory is per-sessie geconstrueerd, maar binnen een lange sessie met veel rotaties is het reëel). Voor een productie-samenwerking waar gebruikers meerdere devices hebben (telefoon, laptop, tablet) is 8 een krappe limiet die zonder opruiming permanent kan worden bereikt.
Oplossingsrichting
remove(deviceId)-methode toe die_peers[deviceId]verwijdert en_perAddressCount[peerAddress]decrement (en verwijder de entry als de teller 0 bereikt). De MUC-rooster kan dit aanroepen bij eenunavailable-presence van een device.directory.devicesForAddress(address).lengthis altijd accuraat, maar O(N) per check. De monotone teller is O(1) maar lekt.Locatie
lib/collab/collab_device_directory.dartregel 74 (_perAddressCount-declaratie), regel 117–124 (increment, geen decrement), regel 64 (perAddressDeviceCap = 8)Severity
MEDIUM — permanent uitsluiting na 8 device-wissels is een stabiliteitsprobleem voor productie-gebruik.