XMPP: frame-transport send/close zonder exception handling — socket-exception kan app crashen of HttpClient lekken #1430
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#1430
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_frame_transport_io.dart—_WebSocketFrameTransportheeft twee plekken waar exceptions niet worden opgevangen:1.
send()gooit als socket gesloten is (regel 117–119)Als de server de WebSocket heeft gesloten maar
_closedis nog niet gezet (de close-event is async en kan nog in de event-queue staan), gooit_socket.add(frame)eenStateErrorofWebSocketException. Deze exception propagatet naar de aanroeper —XmppSession.sendStanza(regel 592) ofXmppSession._send(regel 616) — die hem niet opvangt. De exception belandt in de event-loop als een unhandled exception, wat de app kan crashen of een error-dialog toont.Dit is het meest waarschijnlijk tijdens een reconnect-scenario: de oude transport is gesloten door de server, maar de sessie probeert nog te verzenden vóórdat
_onStreamDroppedheeft gevuuurd.2.
close()lekt HttpClient als socket.close() gooit (regel 122–127)Als
_socket.close()een exception gooit (bijv. de socket is al gesloten door de server), wordt_client.close(force: true)nooit aangeroepen. DeHttpClientlekt — zijn eventueel openstaande connecties en timers worden niet opgeruimd.Trust boundary
Netwerk → Applicatie (socket-lifecycle). Geen externe aanvaller — een gewone netwerkdrop volstaat.
Impact
Oplossingsrichting
send(): vang de exception op en log deze, in plaats van te propagaten:close(): gebruik een try-finally om_client.close(force: true)altijd uit te voeren:Locatie
lib/xmpp/xmpp_frame_transport_io.dartregels 117–119 (send), 122–127 (close)Severity
MEDIUM — send() kan een crash veroorzaken tijdens een netwerkdrop; close() lekt een HttpClient.