XMPP: MUC leave() tijdens lopende join laat join-future hangen tot timeout #1427
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#1427
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/xmpp/xmpp_muc.dart— alsleave()wordt aangeroepen terwijl een join nog loopt (_joining != null,_joined == false), wordt de join-completer nooit voltooid. De join-future hangt tot de join-timeout (20 seconden) of een session-drop.Wat er gebeurt
leave()(regels 266–276) zet_left = true, stuurt eenunavailable-presence, en roept_teardown()aan._teardown()(regels 278–285) annuleert de subscription en sluit de roster-stream, maar completeert de join-completer niet.De
_joining-completer (regel 145) wordt alleen voltooid in_finishJoin(regel 252), die alleen wordt aangeroepen bij:_onSessionDropped(session gesloten)Maar
_teardown()annuleert de subscription (regel 282) — waardoor_onSessionDroppedniet meer vuurt — en sluit de roster (regel 284). De join-timer loopt nog wel, maar die wacht de volle 20 seconden voordat hij_finishJoinaanroept mettimeout.Repro-scenario
muc.join()wordt aangeroepen —_joiningis gezet, join-future is pendingleave()wordt aangeroepen_teardown()annuleert de subscription en sluit de roster_finishJoinmetMucJoinFailure.timeoutIn die 20 seconden kan de aanroeper die op
join()wacht niets anders doen — de future is pending.Trust boundary
Interne logica — geen externe aanvaller. Een gebruiker die annuleert tijdens de join.
Impact
leave()tijdens join.join()wacht kan niet doorgaan tot de future voltooid is.Oplossingsrichting
Completeer de join-completer in
_teardown()als de join nog loopt. Voeg aan_teardown()(of aanleave()) toe:En annuleer de join-timer expliciet in
_teardown():Locatie
lib/xmpp/xmpp_muc.dartregels 266–276 (leave), 278–285 (_teardown), 145–163 (join— completer), 247–254 (_finishJoin)Severity
MEDIUM — 20 seconden hang bij annuleren is een merkbare UX-bug.