diff --git a/Libraries/LibWeb/HTML/MessagePort.cpp b/Libraries/LibWeb/HTML/MessagePort.cpp index b347fe554be..2c955155490 100644 --- a/Libraries/LibWeb/HTML/MessagePort.cpp +++ b/Libraries/LibWeb/HTML/MessagePort.cpp @@ -99,7 +99,11 @@ WebIDL::ExceptionOr MessagePort::transfer_steps(HTML::TransferDataEncoder& // 3. If value is entangled with another port remotePort, then: if (is_entangled()) { // 1. Set remotePort's has been shipped flag to true. - m_remote_port->m_has_been_shipped = true; + + // NOTE: We have to null check here because we can be entangled with a port living in another agent. + // In that case, we'll have a transport, but no remote port object. + if (m_remote_port) + m_remote_port->m_has_been_shipped = true; auto fd = MUST(m_transport->release_underlying_transport_for_transfer()); m_transport.clear(); diff --git a/Tests/LibWeb/Text/expected/HTML/MessagePort-transfer-twice.txt b/Tests/LibWeb/Text/expected/HTML/MessagePort-transfer-twice.txt new file mode 100644 index 00000000000..33c112e2685 --- /dev/null +++ b/Tests/LibWeb/Text/expected/HTML/MessagePort-transfer-twice.txt @@ -0,0 +1,2 @@ +first receipt: re-transferring same port +we good diff --git a/Tests/LibWeb/Text/input/HTML/MessagePort-transfer-twice.html b/Tests/LibWeb/Text/input/HTML/MessagePort-transfer-twice.html new file mode 100644 index 00000000000..d0245d81383 --- /dev/null +++ b/Tests/LibWeb/Text/input/HTML/MessagePort-transfer-twice.html @@ -0,0 +1,27 @@ + + +