summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chromium/content/browser/permissions/permission_service_impl.cc8
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 =