[http] Use a copy of nsHttpConnectionInfo.

The root cause in this bug is that the connection info used by
'SpdyConnectTransaction' is the same instance as the connection info in
'nsHttpTransaction', so we should clone it and let 'SpdyConnectTransaction' use
the cloned one.
This commit is contained in:
Moonchild 2020-11-19 18:19:29 +00:00 committed by roytam1
commit 63a7c7f90e
2 changed files with 8 additions and 7 deletions

View file

@ -3531,17 +3531,18 @@ Http2Session::UnRegisterTunnel(Http2Stream *aTunnel)
}
void
Http2Session::CreateTunnel(nsHttpTransaction *trans,
nsHttpConnectionInfo *ci,
nsIInterfaceRequestor *aCallbacks)
Http2Session::CreateTunnel(nsHttpTransaction* trans,
nsHttpConnectionInfo* ci,
nsIInterfaceRequestor* aCallbacks)
{
LOG(("Http2Session::CreateTunnel %p %p make new tunnel\n", this, trans));
// The connect transaction will hold onto the underlying http
// transaction so that an auth created by the connect can be mappped
// to the correct security callbacks
RefPtr<nsHttpConnectionInfo> clone(ci->Clone());
RefPtr<SpdyConnectTransaction> connectTrans =
new SpdyConnectTransaction(ci, aCallbacks, trans->Caps(), trans, this);
new SpdyConnectTransaction(clone, aCallbacks, trans->Caps(), trans, this);
AddStream(connectTrans, nsISupportsPriority::PRIORITY_NORMAL, false, nullptr);
Http2Stream *tunnel = mStreamTransactionHash.Get(connectTrans);
MOZ_ASSERT(tunnel);