Chromium Code Reviews| Index: chrome/browser/chromeos/certificate_provider/sign_requests.cc |
| diff --git a/chrome/browser/chromeos/certificate_provider/sign_requests.cc b/chrome/browser/chromeos/certificate_provider/sign_requests.cc |
| index 3d3ecfc88029110c417cf324a187dd08efdf0ee1..4c9eca048af66c2ed3078c56b05edf11d16f2d83 100644 |
| --- a/chrome/browser/chromeos/certificate_provider/sign_requests.cc |
| +++ b/chrome/browser/chromeos/certificate_provider/sign_requests.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/chromeos/certificate_provider/sign_requests.h" |
| #include "base/callback.h" |
| +#include "base/rand_util.h" |
| namespace chromeos { |
| namespace certificate_provider { |
| @@ -23,7 +24,13 @@ SignRequests::~SignRequests() {} |
| int SignRequests::AddRequest(const std::string& extension_id, |
| const net::SSLPrivateKey::SignCallback& callback) { |
| RequestsState& state = extension_to_requests_[extension_id]; |
| - const int request_id = state.next_free_id++; |
| + // Generate a random request id so that extensions using |
| + // chrome.certificateProvider can not guess another extension's request id. |
| + int request_id = base::RandInt(0, INT_MAX); |
|
emaxx
2016/09/19 14:01:43
nit: #include <climits>
|
| + while (state.pending_requests.find(request_id) != |
| + state.pending_requests.end()) { |
| + request_id = base::RandInt(0, INT_MAX); |
| + } |
| state.pending_requests[request_id] = callback; |
| return request_id; |
| } |