Bug 394525: malware check non-http channels. r=bz, sr=biesi

This commit is contained in:
2007-11-27 12:42:33 -08:00
parent 0f9a686c76
commit 9d0e5f9758

View File

@@ -9262,12 +9262,25 @@ nsClassifierCallback::Run()
nsresult rv = channel->GetURI(getter_AddRefs(uri));
NS_ENSURE_SUCCESS(rv, rv);
// XXX: we need to audit other channels to make sure they can handle
// being suspended directly after AsyncOpen()
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(channel);
if (!httpChannel) {
return NS_OK;
}
// Don't bother checking certain types of URIs.
PRBool hasFlags;
rv = NS_URIChainHasFlags(uri,
nsIProtocolHandler::URI_DANGEROUS_TO_LOAD,
&hasFlags);
NS_ENSURE_SUCCESS(rv, rv);
if (hasFlags) return NS_OK;
rv = NS_URIChainHasFlags(uri,
nsIProtocolHandler::URI_IS_LOCAL_FILE,
&hasFlags);
NS_ENSURE_SUCCESS(rv, rv);
if (hasFlags) return NS_OK;
rv = NS_URIChainHasFlags(uri,
nsIProtocolHandler::URI_IS_UI_RESOURCE,
&hasFlags);
NS_ENSURE_SUCCESS(rv, rv);
if (hasFlags) return NS_OK;
nsCOMPtr<nsIURIClassifier> uriClassifier =
do_GetService(NS_URICLASSIFIERSERVICE_CONTRACTID, &rv);
@@ -9281,7 +9294,13 @@ nsClassifierCallback::Run()
// Suspend the channel, it will be resumed when we get the classifier
// callback.
rv = channel->Suspend();
NS_ENSURE_SUCCESS(rv, rv);
if (NS_FAILED(rv)) {
// Some channels (including nsJSChannel) fail on Suspend. This
// shouldn't be fatal, but will prevent malware from being
// blocked on these channels.
return NS_OK;
}
mSuspendedChannel = channel;
#ifdef DEBUG
PR_LOG(gDocShellLog, PR_LOG_DEBUG,