diff --git a/netwerk/base/public/nsNetUtil.h b/netwerk/base/public/nsNetUtil.h index 1949c5e4244..91afd760d4e 100644 --- a/netwerk/base/public/nsNetUtil.h +++ b/netwerk/base/public/nsNetUtil.h @@ -1976,19 +1976,26 @@ NS_RelaxStrictFileOriginPolicy(nsIURI *aTargetURI, // inherit its source principal and be scriptable by that source. // bool sourceIsDir; - bool contained = false; + bool allowed = false; nsresult rv = sourceFile->IsDirectory(&sourceIsDir); if (NS_SUCCEEDED(rv) && sourceIsDir) { - rv = sourceFile->Contains(targetFile, true, &contained); + rv = sourceFile->Contains(targetFile, true, &allowed); } else { nsCOMPtr sourceParent; rv = sourceFile->GetParent(getter_AddRefs(sourceParent)); if (NS_SUCCEEDED(rv) && sourceParent) { - rv = sourceParent->Contains(targetFile, true, &contained); + rv = sourceParent->Equals(targetFile, &allowed); + if (NS_FAILED(rv) || !allowed) { + rv = sourceParent->Contains(targetFile, true, &allowed); + } else { + MOZ_ASSERT(aAllowDirectoryTarget, + "sourceFile->Parent == targetFile, but targetFile " + "should've been disallowed if it is a directory"); + } } } - if (NS_SUCCEEDED(rv) && contained) { + if (NS_SUCCEEDED(rv) && allowed) { return true; }