diff options
Diffstat (limited to 'content/browser/child_process_security_policy_impl.cc')
-rw-r--r-- | content/browser/child_process_security_policy_impl.cc | 13 |
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(); } |