Commit e57ad155 authored by Leonid Baraz's avatar Leonid Baraz Committed by Commit Bot

Pad block with random bytes.

Add a test for all possible sizes of record - to see that padding works
correctly for all.

Bug: b:157943388
Change-Id: Iafb432365fb57ff4fad3fbebd81f8ece93c32033
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2300683Reviewed-by: default avatarZach Trudo <zatrudo@google.com>
Commit-Queue: Leonid Baraz <lbaraz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#788840}
parent b66db687
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
#include "base/hash/hash.h" #include "base/hash/hash.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/rand_util.h"
#include "base/sequence_checker.h" #include "base/sequence_checker.h"
#include "base/strings/strcat.h" #include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
...@@ -34,6 +33,7 @@ ...@@ -34,6 +33,7 @@
#include "chrome/browser/policy/messaging_layer/util/status_macros.h" #include "chrome/browser/policy/messaging_layer/util/status_macros.h"
#include "chrome/browser/policy/messaging_layer/util/statusor.h" #include "chrome/browser/policy/messaging_layer/util/statusor.h"
#include "chrome/browser/policy/messaging_layer/util/task_runner_context.h" #include "chrome/browser/policy/messaging_layer/util/task_runner_context.h"
#include "crypto/random.h"
namespace reporting { namespace reporting {
...@@ -344,10 +344,11 @@ Status StorageQueue::WriteHeaderAndBlock( ...@@ -344,10 +344,11 @@ Status StorageQueue::WriteHeaderAndBlock(
const size_t pad_size = const size_t pad_size =
GetPaddingToNextFrameSize(sizeof(header) + data.size()); GetPaddingToNextFrameSize(sizeof(header) + data.size());
if (pad_size != FRAME_SIZE) { if (pad_size != FRAME_SIZE) {
// TODO(b/157943388): Fill in with random bytes. // Fill in with random bytes.
uint8_t junk_bytes[FRAME_SIZE]; uint8_t junk_bytes[FRAME_SIZE];
memset(&junk_bytes[0], 0, FRAME_SIZE); const auto pad_span = base::make_span(&junk_bytes[0], pad_size);
write_status = file->Append(base::make_span(&junk_bytes[0], pad_size)); crypto::RandBytes(pad_span);
write_status = file->Append(pad_span);
if (!write_status.ok()) { if (!write_status.ok()) {
return Status(error::RESOURCE_EXHAUSTED, "Cannot pad file"); return Status(error::RESOURCE_EXHAUSTED, "Cannot pad file");
} }
......
...@@ -252,6 +252,29 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndFlush) { ...@@ -252,6 +252,29 @@ TEST_P(StorageQueueTest, WriteIntoNewStorageQueueAndFlush) {
storage_queue_->Flush(); storage_queue_->Flush();
} }
TEST_P(StorageQueueTest, ValidateVariousRecordSizes) {
std::vector<std::string> blobs;
for (size_t i = 16; i < 16 + 16; ++i) {
blobs.emplace_back(i, 'R');
}
CreateStorageQueueOrDie(BuildStorageQueueOptionsOnlyManual());
for (const auto& blob : blobs) {
WriteStringOrDie(blob);
}
// Set uploader expectations.
EXPECT_CALL(set_mock_uploader_expectations_, Call(NotNull()))
.WillOnce(Invoke([&blobs](MockUploadClient* mock_upload_client) {
MockUploadClient::SetUp client_setup(mock_upload_client);
for (const auto& blob : blobs) {
client_setup.Required(blob);
}
}));
// Flush manually.
storage_queue_->Flush();
}
TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmations) { TEST_P(StorageQueueTest, WriteAndRepeatedlyUploadWithConfirmations) {
CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic()); CreateStorageQueueOrDie(BuildStorageQueueOptionsPeriodic());
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment