Bug 1640160 - Serialize mRequestContextId with BrowsingContext's IPCInitializer to ensure that we don't try to create a request context with an id of 0. r=nika

This was a bit of pain to track down, because some code was allowing an ID of 0, and creating a request context to match, but other code was treating 0 as invalid.

Differential Revision: https://phabricator.services.mozilla.com/D76652
This commit is contained in:
Matt Woodrow
2020-05-26 21:14:27 +00:00
parent 58830995cf
commit 50fe906c42
3 changed files with 9 additions and 0 deletions

View File

@@ -2383,6 +2383,7 @@ void IPDLParamTraits<dom::BrowsingContext::IPCInitializer>::Write(
WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteTabs); WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteTabs);
WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteSubframes); WriteIPDLParam(aMessage, aActor, aInit.mUseRemoteSubframes);
WriteIPDLParam(aMessage, aActor, aInit.mOriginAttributes); WriteIPDLParam(aMessage, aActor, aInit.mOriginAttributes);
WriteIPDLParam(aMessage, aActor, aInit.mRequestContextId);
WriteIPDLParam(aMessage, aActor, aInit.mFields); WriteIPDLParam(aMessage, aActor, aInit.mFields);
} }
@@ -2397,6 +2398,7 @@ bool IPDLParamTraits<dom::BrowsingContext::IPCInitializer>::Read(
!ReadIPDLParam(aMessage, aIterator, aActor, !ReadIPDLParam(aMessage, aIterator, aActor,
&aInit->mUseRemoteSubframes) || &aInit->mUseRemoteSubframes) ||
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mOriginAttributes) || !ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mOriginAttributes) ||
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mRequestContextId) ||
!ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mFields)) { !ReadIPDLParam(aMessage, aIterator, aActor, &aInit->mFields)) {
return false; return false;
} }

View File

@@ -505,6 +505,10 @@ RequestContextService::GetRequestContext(const uint64_t rcID,
return NS_ERROR_ILLEGAL_DURING_SHUTDOWN; return NS_ERROR_ILLEGAL_DURING_SHUTDOWN;
} }
if (!rcID) {
return NS_ERROR_INVALID_ARG;
}
if (!mTable.Get(rcID, rc)) { if (!mTable.Get(rcID, rc)) {
nsCOMPtr<nsIRequestContext> newSC = new RequestContext(rcID); nsCOMPtr<nsIRequestContext> newSC = new RequestContext(rcID);
mTable.Put(rcID, newSC); mTable.Put(rcID, newSC);

View File

@@ -143,6 +143,9 @@ nsresult nsDocLoader::Init() {
nsresult nsDocLoader::InitWithBrowsingContext( nsresult nsDocLoader::InitWithBrowsingContext(
BrowsingContext* aBrowsingContext) { BrowsingContext* aBrowsingContext) {
RefPtr<net::nsLoadGroup> loadGroup = new net::nsLoadGroup(); RefPtr<net::nsLoadGroup> loadGroup = new net::nsLoadGroup();
if (!aBrowsingContext->GetRequestContextId()) {
return NS_ERROR_NOT_AVAILABLE;
}
nsresult rv = loadGroup->InitWithRequestContextId( nsresult rv = loadGroup->InitWithRequestContextId(
aBrowsingContext->GetRequestContextId()); aBrowsingContext->GetRequestContextId());
if (NS_FAILED(rv)) return rv; if (NS_FAILED(rv)) return rv;