Bug 1509989 - Factor out nsRange security checks. r=mats

Differential Revision: https://phabricator.services.mozilla.com/D13069

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Emilio Cobos Álvarez 2018-11-27 16:54:34 +00:00
Родитель 8965794e05
Коммит c10bb786b1
2 изменённых файлов: 24 добавлений и 20 удалений

Просмотреть файл

@ -1251,11 +1251,19 @@ nsRange::SetStartJS(nsINode& aNode, uint32_t aOffset, ErrorResult& aErr)
SetStart(aNode, aOffset, aErr);
}
bool
nsRange::CanAccess(const nsINode& aNode) const
{
if (nsContentUtils::LegacyIsCallerNativeCode()) {
return true;
}
return nsContentUtils::CanCallerAccess(&aNode);
}
void
nsRange::SetStart(nsINode& aNode, uint32_t aOffset, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1300,8 +1308,7 @@ nsRange::SetStartBeforeJS(nsINode& aNode, ErrorResult& aErr)
void
nsRange::SetStartBefore(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1326,8 +1333,7 @@ nsRange::SetStartAfterJS(nsINode& aNode, ErrorResult& aErr)
void
nsRange::SetStartAfter(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1352,8 +1358,7 @@ nsRange::SetEndJS(nsINode& aNode, uint32_t aOffset, ErrorResult& aErr)
void
nsRange::SetEnd(nsINode& aNode, uint32_t aOffset, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1476,8 +1481,7 @@ nsRange::SetEndBeforeJS(nsINode& aNode, ErrorResult& aErr)
void
nsRange::SetEndBefore(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1502,8 +1506,7 @@ nsRange::SetEndAfterJS(nsINode& aNode, ErrorResult& aErr)
void
nsRange::SetEndAfter(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1550,8 +1553,7 @@ nsRange::SelectNodeJS(nsINode& aNode, ErrorResult& aErr)
void
nsRange::SelectNode(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -1591,8 +1593,7 @@ nsRange::SelectNodeContentsJS(nsINode& aNode, ErrorResult& aErr)
void
nsRange::SelectNodeContents(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -2611,8 +2612,7 @@ nsRange::CloneRange() const
void
nsRange::InsertNode(nsINode& aNode, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNode)) {
if (!CanAccess(aNode)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}
@ -2704,8 +2704,7 @@ nsRange::InsertNode(nsINode& aNode, ErrorResult& aRv)
void
nsRange::SurroundContents(nsINode& aNewParent, ErrorResult& aRv)
{
if (!nsContentUtils::LegacyIsCallerNativeCode() &&
!nsContentUtils::CanCallerAccess(&aNewParent)) {
if (!CanAccess(aNewParent)) {
aRv.Throw(NS_ERROR_DOM_SECURITY_ERR);
return;
}

Просмотреть файл

@ -392,6 +392,11 @@ private:
nsINode** aClosestAncestor,
nsINode** aFarthestAncestor);
/**
* Returns whether a node is safe to be accessed by the current caller.
*/
bool CanAccess(const nsINode&) const;
public:
/**
* Compute the root node of aNode for initializing range classes.