зеркало из https://github.com/mozilla/gecko-dev.git
Bug 660066 patch 2: Prevent nsFileDataURI from QI'ing to nsSimpleURI. r=bz
This commit is contained in:
Родитель
10cede3f4c
Коммит
f7a686456c
|
@ -161,12 +161,23 @@ public:
|
|||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
};
|
||||
|
||||
static NS_DEFINE_CID(kThisSimpleURIImplementationCID,
|
||||
NS_THIS_SIMPLEURI_IMPLEMENTATION_CID);
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(nsFileDataURI, nsSimpleURI)
|
||||
NS_IMPL_RELEASE_INHERITED(nsFileDataURI, nsSimpleURI)
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN(nsFileDataURI)
|
||||
NS_INTERFACE_MAP_ENTRY(nsIURIWithPrincipal)
|
||||
if (aIID.Equals(kFILEDATAURICID))
|
||||
foundInterface = static_cast<nsIURI*>(this);
|
||||
foundInterface = static_cast<nsIURI*>(this);
|
||||
else if (aIID.Equals(kThisSimpleURIImplementationCID)) {
|
||||
// Need to return explicitly here, because if we just set foundInterface
|
||||
// to null the NS_INTERFACE_MAP_END_INHERITING will end up calling into
|
||||
// nsSimplURI::QueryInterface and finding something for this CID.
|
||||
*aInstancePtr = nsnull;
|
||||
return NS_NOINTERFACE;
|
||||
}
|
||||
else
|
||||
NS_INTERFACE_MAP_END_INHERITING(nsSimpleURI)
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
Components.utils.import("resource://gre/modules/NetUtil.jsm");
|
||||
const Ci = Components.interfaces;
|
||||
const SIMPLEURI_SPEC = "data:text/plain,hello world";
|
||||
const FILEDATA_SPEC = "moz-filedata:123456";
|
||||
|
||||
function do_info(text, stack) {
|
||||
if (!stack)
|
||||
stack = Components.stack.caller;
|
||||
|
||||
dump( "\n" +
|
||||
"TEST-INFO | " + stack.filename + " | [" + stack.name + " : " +
|
||||
stack.lineNumber + "] " + text + "\n");
|
||||
}
|
||||
|
||||
function do_check_uri_neq(uri1, uri2)
|
||||
{
|
||||
do_info("Checking equality in forward direction...");
|
||||
do_check_false(uri1.equals(uri2));
|
||||
do_check_false(uri1.equalsExceptRef(uri2));
|
||||
|
||||
do_info("Checking equality in reverse direction...");
|
||||
do_check_false(uri2.equals(uri1));
|
||||
do_check_false(uri2.equalsExceptRef(uri1));
|
||||
}
|
||||
|
||||
function run_test()
|
||||
{
|
||||
var simpleURI = NetUtil.newURI(SIMPLEURI_SPEC);
|
||||
var fileDataURI = NetUtil.newURI(FILEDATA_SPEC);
|
||||
|
||||
do_info("Checking that " + SIMPLEURI_SPEC + " != " + FILEDATA_SPEC);
|
||||
do_check_uri_neq(simpleURI, fileDataURI);
|
||||
|
||||
do_info("Changing the nsSimpleURI spec to match the nsFileDataURI");
|
||||
simpleURI.spec = FILEDATA_SPEC;
|
||||
|
||||
do_info("Verifying that .spec matches");
|
||||
do_check_eq(simpleURI.spec, fileDataURI.spec);
|
||||
|
||||
do_info("Checking that nsSimpleURI != nsFileDataURI despite their .spec matching")
|
||||
do_check_uri_neq(simpleURI, fileDataURI);
|
||||
}
|
|
@ -60,6 +60,7 @@ tail =
|
|||
[test_bug652761.js]
|
||||
[test_bug651100.js]
|
||||
[test_bug659569.js]
|
||||
[test_bug660066.js]
|
||||
[test_cacheflags.js]
|
||||
[test_channel_close.js]
|
||||
[test_compareURIs.js]
|
||||
|
|
Загрузка…
Ссылка в новой задаче