diff options
-rw-r--r-- | chromium/content/browser/permissions/permission_service_impl.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/chromium/content/browser/permissions/permission_service_impl.cc b/chromium/content/browser/permissions/permission_service_impl.cc index c92ebfa274b..d8586c0917b 100644 --- a/chromium/content/browser/permissions/permission_service_impl.cc +++ b/chromium/content/browser/permissions/permission_service_impl.cc @@ -7,6 +7,7 @@ #include <stddef.h> #include <memory> +#include <set> #include <utility> #include "base/bind.h" @@ -175,11 +176,18 @@ void PermissionServiceImpl::RequestPermissions( } std::vector<PermissionType> types(permissions.size()); + std::set<PermissionType> duplicates_check; for (size_t i = 0; i < types.size(); ++i) { if (!PermissionDescriptorToPermissionType(permissions[i], &types[i])) { ReceivedBadMessage(); return; } + // Each permission should appear at most once in the message. + bool inserted = duplicates_check.insert(types[i]).second; + if (!inserted) { + ReceivedBadMessage(); + return; + } } std::unique_ptr<PendingRequest> pending_request = |