Bug 1513470 - Block redirect content from being shown when target data URL is broken, r=dragana

This commit is contained in:
Honza Bambas 2018-12-12 11:10:00 +02:00
parent 44da92569e
commit 7c45d38957
2 changed files with 8 additions and 1 deletions

View File

@ -82,7 +82,13 @@ nsresult nsDataChannel::OpenContentStream(bool async, nsIInputStream** result,
if (lBase64) { if (lBase64) {
nsAutoCString decodedData; nsAutoCString decodedData;
rv = Base64Decode(data, decodedData); rv = Base64Decode(data, decodedData);
NS_ENSURE_SUCCESS(rv, rv); if (NS_FAILED(rv)) {
// Returning this error code instead of what Base64Decode returns
// (NS_ERROR_ILLEGAL_VALUE) will prevent rendering of redirect response
// content by HTTP channels. It's also more logical error to return.
// Here we know the URL is actually corrupted.
return NS_ERROR_MALFORMED_URI;
}
contentLen = decodedData.Length(); contentLen = decodedData.Length();
rv = NS_NewCStringInputStream(getter_AddRefs(bufInStream), decodedData); rv = NS_NewCStringInputStream(getter_AddRefs(bufInStream), decodedData);

View File

@ -5617,6 +5617,7 @@ nsresult nsHttpChannel::ContinueProcessRedirection(nsresult rv) {
} else { } else {
rv = mRedirectChannel->AsyncOpen(mListener, mListenerContext); rv = mRedirectChannel->AsyncOpen(mListener, mListenerContext);
} }
LOG((" new channel AsyncOpen returned %" PRIX32, static_cast<uint32_t>(rv)));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
// close down this channel // close down this channel