summaryrefslogtreecommitdiffstats
path: root/content/browser/child_process_security_policy_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/child_process_security_policy_impl.cc')
-rw-r--r--content/browser/child_process_security_policy_impl.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/content/browser/child_process_security_policy_impl.cc b/content/browser/child_process_security_policy_impl.cc
index 006418e3..e86ccae 100644
--- a/content/browser/child_process_security_policy_impl.cc
+++ b/content/browser/child_process_security_policy_impl.cc
@@ -148,9 +148,18 @@ class ChildProcessSecurityPolicyImpl::SecurityState {
bool HasPermissionsForFile(const FilePath& file, int permissions) {
FilePath current_path = file.StripTrailingSeparators();
FilePath last_path;
+ int skip = 0;
while (current_path != last_path) {
- if (file_permissions_.find(current_path) != file_permissions_.end())
- return (file_permissions_[current_path] & permissions) == permissions;
+ FilePath base_name = current_path.BaseName();
+ if (base_name.value() == FilePath::kParentDirectory) {
+ ++skip;
+ } else if (skip > 0) {
+ if (base_name.value() != FilePath::kCurrentDirectory)
+ --skip;
+ } else {
+ if (file_permissions_.find(current_path) != file_permissions_.end())
+ return (file_permissions_[current_path] & permissions) == permissions;
+ }
last_path = current_path;
current_path = current_path.DirName();
}