| Index: components/rappor/byte_vector_utils.cc
|
| diff --git a/components/rappor/byte_vector_utils.cc b/components/rappor/byte_vector_utils.cc
|
| index 57f25744566d19056f3b1cd511789f467a773e2a..69abcd4dffd8e3c8cfb55061c8aa2cc58c61cedf 100644
|
| --- a/components/rappor/byte_vector_utils.cc
|
| +++ b/components/rappor/byte_vector_utils.cc
|
| @@ -78,9 +78,17 @@ bool HMAC_DRBG_Update(const std::string& provided_data,
|
|
|
| } // namespace
|
|
|
| +ByteVector* ByteVectorAnd(const ByteVector& lhs, ByteVector* rhs) {
|
| + DCHECK_EQ(lhs.size(), rhs->size());
|
| + for (size_t i = 0; i < lhs.size(); ++i) {
|
| + (*rhs)[i] = lhs[i] & (*rhs)[i];
|
| + }
|
| + return rhs;
|
| +}
|
| +
|
| ByteVector* ByteVectorOr(const ByteVector& lhs, ByteVector* rhs) {
|
| DCHECK_EQ(lhs.size(), rhs->size());
|
| - for (size_t i = 0, len = lhs.size(); i < len; ++i) {
|
| + for (size_t i = 0; i < lhs.size(); ++i) {
|
| (*rhs)[i] = lhs[i] | (*rhs)[i];
|
| }
|
| return rhs;
|
| @@ -90,7 +98,7 @@ ByteVector* ByteVectorMerge(const ByteVector& mask,
|
| const ByteVector& lhs,
|
| ByteVector* rhs) {
|
| DCHECK_EQ(lhs.size(), rhs->size());
|
| - for (size_t i = 0, len = lhs.size(); i < len; ++i) {
|
| + for (size_t i = 0; i < lhs.size(); ++i) {
|
| (*rhs)[i] = (lhs[i] & ~mask[i]) | ((*rhs)[i] & mask[i]);
|
| }
|
| return rhs;
|
| @@ -127,6 +135,8 @@ ByteVector ByteVectorGenerator::GetWeightedRandomByteVector(
|
| return *ByteVectorOr(GetRandomByteVector(), &bytes);
|
| case PROBABILITY_50:
|
| return bytes;
|
| + case PROBABILITY_25:
|
| + return *ByteVectorAnd(GetRandomByteVector(), &bytes);
|
| }
|
| NOTREACHED();
|
| return bytes;
|
|
|