diff --git a/Userland/Libraries/LibWeb/HTML/MessagePort.cpp b/Userland/Libraries/LibWeb/HTML/MessagePort.cpp index 1fbee5908c..a66850f95b 100644 --- a/Userland/Libraries/LibWeb/HTML/MessagePort.cpp +++ b/Userland/Libraries/LibWeb/HTML/MessagePort.cpp @@ -297,8 +297,11 @@ void MessagePort::read_from_socket() auto serialize_with_transfer_result = MUST(decoder.decode()); - post_message_task_steps(serialize_with_transfer_result); + // Make sure to advance our state machine before dispatching the MessageEvent, + // as dispatching events can run arbitrary JS (and cause us to receive another message!) m_socket_state = SocketState::Header; + + post_message_task_steps(serialize_with_transfer_result); break; } case SocketState::Error: