Merge remote-tracking branch 'origin/tracking' into custom

This commit is contained in:
roytam1 2024-09-13 10:04:42 +08:00
commit 1b648cc1d8
6 changed files with 47 additions and 3 deletions

View file

@ -76,6 +76,7 @@ nsIIOService *nsScriptSecurityManager::sIOService = nullptr;
nsIStringBundle *nsScriptSecurityManager::sStrBundle = nullptr; nsIStringBundle *nsScriptSecurityManager::sStrBundle = nullptr;
JSContext *nsScriptSecurityManager::sContext = nullptr; JSContext *nsScriptSecurityManager::sContext = nullptr;
bool nsScriptSecurityManager::sStrictFileOriginPolicy = true; bool nsScriptSecurityManager::sStrictFileOriginPolicy = true;
bool nsScriptSecurityManager::sSameOriginPolicy = true;
/////////////////////////// ///////////////////////////
// Convenience Functions // // Convenience Functions //
@ -607,7 +608,7 @@ nsScriptSecurityManager::CheckSameOriginURI(nsIURI* aSourceURI,
nsIURI* aTargetURI, nsIURI* aTargetURI,
bool reportError) bool reportError)
{ {
if (!SecurityCompareURIs(aSourceURI, aTargetURI)) if (sSameOriginPolicy && !SecurityCompareURIs(aSourceURI, aTargetURI))
{ {
if (reportError) { if (reportError) {
ReportError(nullptr, NS_LITERAL_STRING("CheckSameOriginError"), ReportError(nullptr, NS_LITERAL_STRING("CheckSameOriginError"),
@ -1434,10 +1435,13 @@ nsScriptSecurityManager::CanGetService(JSContext *cx,
const char sJSEnabledPrefName[] = "javascript.enabled"; const char sJSEnabledPrefName[] = "javascript.enabled";
const char sFileOriginPolicyPrefName[] = const char sFileOriginPolicyPrefName[] =
"security.fileuri.strict_origin_policy"; "security.fileuri.strict_origin_policy";
const char sSameOriginPolicyPrefName[] =
"security.same_origin_policy.enabled";
static const char* kObservedPrefs[] = { static const char* kObservedPrefs[] = {
sJSEnabledPrefName, sJSEnabledPrefName,
sFileOriginPolicyPrefName, sFileOriginPolicyPrefName,
sSameOriginPolicyPrefName,
"capability.policy.", "capability.policy.",
nullptr nullptr
}; };
@ -1593,6 +1597,8 @@ nsScriptSecurityManager::ScriptSecurityPrefChanged()
Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled); Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled);
sStrictFileOriginPolicy = sStrictFileOriginPolicy =
Preferences::GetBool(sFileOriginPolicyPrefName, false); Preferences::GetBool(sFileOriginPolicyPrefName, false);
sSameOriginPolicy =
Preferences::GetBool(sSameOriginPolicyPrefName, true);
mFileURIWhitelist.reset(); mFileURIWhitelist.reset();
} }

View file

@ -152,6 +152,7 @@ private:
} }
static bool sStrictFileOriginPolicy; static bool sStrictFileOriginPolicy;
static bool sSameOriginPolicy;
static nsIIOService *sIOService; static nsIIOService *sIOService;
static nsIStringBundle *sStrBundle; static nsIStringBundle *sStrBundle;

View file

@ -287,8 +287,15 @@ ReserveProcessExecutableMemory(size_t bytes)
// Note that randomAddr is just a hint: if the address is not available // Note that randomAddr is just a hint: if the address is not available
// mmap will pick a different address. // mmap will pick a different address.
void* randomAddr = ComputeRandomAllocationAddress(); void* randomAddr = ComputeRandomAllocationAddress();
#ifdef PROT_MPROTECT
void* p = MozTaggedAnonymousMmap(randomAddr, bytes,
PROT_MPROTECT(PROT_EXEC | PROT_WRITE | PROT_READ),
MAP_PRIVATE | MAP_ANON,
-1, 0, "js-executable-memory");
#else
void* p = MozTaggedAnonymousMmap(randomAddr, bytes, PROT_NONE, MAP_PRIVATE | MAP_ANON, void* p = MozTaggedAnonymousMmap(randomAddr, bytes, PROT_NONE, MAP_PRIVATE | MAP_ANON,
-1, 0, "js-executable-memory"); -1, 0, "js-executable-memory");
#endif
if (p == MAP_FAILED) if (p == MAP_FAILED)
return nullptr; return nullptr;
return p; return p;
@ -315,7 +322,13 @@ ProtectionSettingToFlags(ProtectionSetting protection)
static void static void
CommitPages(void* addr, size_t bytes, ProtectionSetting protection) CommitPages(void* addr, size_t bytes, ProtectionSetting protection)
{ {
void* p = MozTaggedAnonymousMmap(addr, bytes, ProtectionSettingToFlags(protection), void* p = MozTaggedAnonymousMmap(addr, bytes,
#ifdef PROT_MPROTECT
ProtectionSettingToFlags(protection) |
PROT_MPROTECT(PROT_EXEC | PROT_WRITE | PROT_READ),
#else
ProtectionSettingToFlags(protection),
#endif
MAP_FIXED | MAP_PRIVATE | MAP_ANON, MAP_FIXED | MAP_PRIVATE | MAP_ANON,
-1, 0, "js-executable-memory"); -1, 0, "js-executable-memory");
MOZ_RELEASE_ASSERT(addr == p); MOZ_RELEASE_ASSERT(addr == p);

View file

@ -644,7 +644,12 @@ WasmArrayRawBuffer::Allocate(uint32_t numBytes, Maybe<uint32_t> maxSize)
return nullptr; return nullptr;
} }
# else // XP_WIN # else // XP_WIN
void* data = MozTaggedAnonymousMmap(nullptr, (size_t) mappedSizeWithHeader, PROT_NONE, void* data = MozTaggedAnonymousMmap(nullptr, (size_t) mappedSizeWithHeader,
#ifdef PROT_MPROTECT
PROT_MPROTECT(PROT_EXEC | PROT_WRITE | PROT_READ),
#else
PROT_NONE,
#endif
MAP_PRIVATE | MAP_ANON, -1, 0, "wasm-reserved"); MAP_PRIVATE | MAP_ANON, -1, 0, "wasm-reserved");
if (data == MAP_FAILED) if (data == MAP_FAILED)
return nullptr; return nullptr;

View file

@ -1221,6 +1221,12 @@ pref("dom.cycle_collector.incremental", false);
pref("content.sink.pending_event_mode", 0); pref("content.sink.pending_event_mode", 0);
#endif #endif
// Is support for CORS enabled?
pref("content.cors.disable", false);
// Should preflight requests be bypassed when CORS is disabled?
pref("content.cors.bypass_preflight_request", false);
// Disable popups from plugins by default // Disable popups from plugins by default
// 0 = openAllowed // 0 = openAllowed
// 1 = openControlled // 1 = openControlled
@ -1337,6 +1343,9 @@ pref("javascript.options.streams", true);
pref("advanced.mailftp", false); pref("advanced.mailftp", false);
pref("image.animation_mode", "normal"); pref("image.animation_mode", "normal");
// Same-origin policy for all URIs.
pref("security.same_origin_policy.enabled", true);
// Same-origin policy for file URIs, "false" is traditional // Same-origin policy for file URIs, "false" is traditional
pref("security.fileuri.strict_origin_policy", true); pref("security.fileuri.strict_origin_policy", true);

View file

@ -53,6 +53,7 @@ using namespace mozilla;
static bool gDisableCORS = false; static bool gDisableCORS = false;
static bool gDisableCORSPrivateData = false; static bool gDisableCORSPrivateData = false;
static bool gBypassCORSPreflightRequest = false;
static void static void
LogBlockedRequest(nsIRequest* aRequest, LogBlockedRequest(nsIRequest* aRequest,
@ -414,6 +415,8 @@ nsCORSListenerProxy::Startup()
"content.cors.disable"); "content.cors.disable");
Preferences::AddBoolVarCache(&gDisableCORSPrivateData, Preferences::AddBoolVarCache(&gDisableCORSPrivateData,
"content.cors.no_private_data"); "content.cors.no_private_data");
Preferences::AddBoolVarCache(&gBypassCORSPreflightRequest,
"content.cors.bypass_preflight_request");
} }
/* static */ /* static */
@ -543,6 +546,9 @@ nsCORSListenerProxy::CheckRequestApproved(nsIRequest* aRequest)
} }
if (gDisableCORS) { if (gDisableCORS) {
if (gBypassCORSPreflightRequest) {
return NS_OK;
}
LogBlockedRequest(aRequest, "CORSDisabled", nullptr); LogBlockedRequest(aRequest, "CORSDisabled", nullptr);
return NS_ERROR_DOM_BAD_URI; return NS_ERROR_DOM_BAD_URI;
} }
@ -1413,6 +1419,10 @@ nsCORSListenerProxy::StartCORSPreflight(nsIChannel* aRequestChannel,
*aPreflightChannel = nullptr; *aPreflightChannel = nullptr;
if (gDisableCORS) { if (gDisableCORS) {
if (gBypassCORSPreflightRequest) {
aCallback->OnPreflightSucceeded();
return NS_OK;
}
LogBlockedRequest(aRequestChannel, "CORSDisabled", nullptr); LogBlockedRequest(aRequestChannel, "CORSDisabled", nullptr);
return NS_ERROR_DOM_BAD_URI; return NS_ERROR_DOM_BAD_URI;
} }