Merge changes I669a03a6,Ibb774d6d
* changes: libsnapshot: Fix footer values and verification libsnapshot: Fix some minor formatting bugs
This commit is contained in:
commit
f6d42d45c5
4 changed files with 19 additions and 5 deletions
|
@ -272,7 +272,6 @@ TEST_F(CowTest, GetSize) {
|
|||
}
|
||||
|
||||
TEST_F(CowTest, Append) {
|
||||
cow_->DoNotRemove();
|
||||
CowOptions options;
|
||||
auto writer = std::make_unique<CowWriter>(options);
|
||||
ASSERT_TRUE(writer->Initialize(cow_->fd));
|
||||
|
|
|
@ -154,7 +154,8 @@ bool CowReader::ParseOps() {
|
|||
}
|
||||
} else if (current_op.type == kCowFooterOp) {
|
||||
memcpy(&footer_.op, ¤t_op, sizeof(footer_.op));
|
||||
|
||||
// we don't consider this an operation for the checksum
|
||||
current_op_num--;
|
||||
if (android::base::ReadFully(fd_, &footer_.data, sizeof(footer_.data))) {
|
||||
has_footer_ = true;
|
||||
if (next_last_label) {
|
||||
|
@ -170,6 +171,19 @@ bool CowReader::ParseOps() {
|
|||
memset(csum, 0, sizeof(uint8_t) * 32);
|
||||
|
||||
if (has_footer_) {
|
||||
if (ops_buffer->size() != footer_.op.num_ops) {
|
||||
LOG(ERROR) << "num ops does not match";
|
||||
return false;
|
||||
}
|
||||
if (ops_buffer->size() * sizeof(CowOperation) != footer_.op.ops_size) {
|
||||
LOG(ERROR) << "ops size does not match ";
|
||||
return false;
|
||||
}
|
||||
SHA256(&footer_.op, sizeof(footer_.op), footer_.data.footer_checksum);
|
||||
if (memcmp(csum, footer_.data.ops_checksum, sizeof(csum)) != 0) {
|
||||
LOG(ERROR) << "ops checksum does not match";
|
||||
return false;
|
||||
}
|
||||
SHA256(ops_buffer.get()->data(), footer_.op.ops_size, csum);
|
||||
if (memcmp(csum, footer_.data.ops_checksum, sizeof(csum)) != 0) {
|
||||
LOG(ERROR) << "ops checksum does not match";
|
||||
|
|
|
@ -185,6 +185,7 @@ bool CowWriter::OpenForAppend() {
|
|||
// Reset this, since we're going to reimport all operations.
|
||||
footer_.op.num_ops = 0;
|
||||
next_op_pos_ = sizeof(header_);
|
||||
ops_.resize(0);
|
||||
|
||||
auto iter = reader->GetOpIter();
|
||||
while (!iter->Done()) {
|
||||
|
@ -233,6 +234,7 @@ bool CowWriter::OpenForAppend(uint64_t label) {
|
|||
// Reset this, since we're going to reimport all operations.
|
||||
footer_.op.num_ops = 0;
|
||||
next_op_pos_ = sizeof(header_);
|
||||
ops_.resize(0);
|
||||
|
||||
auto iter = reader->GetOpIter();
|
||||
while (!iter->Done()) {
|
||||
|
@ -247,7 +249,7 @@ bool CowWriter::OpenForAppend(uint64_t label) {
|
|||
}
|
||||
|
||||
if (!found_label) {
|
||||
PLOG(ERROR) << "Failed to find last label";
|
||||
LOG(ERROR) << "Failed to find last label";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -384,7 +386,7 @@ static void SHA256(const void*, size_t, uint8_t[]) {
|
|||
}
|
||||
|
||||
bool CowWriter::Finalize() {
|
||||
footer_.op.ops_size = ops_.size() + sizeof(footer_.op);
|
||||
footer_.op.ops_size = ops_.size();
|
||||
uint64_t pos;
|
||||
|
||||
if (!GetDataPos(&pos)) {
|
||||
|
|
|
@ -114,7 +114,6 @@ class CowWriter : public ICowWriter {
|
|||
bool OpenForWrite();
|
||||
bool OpenForAppend();
|
||||
bool OpenForAppend(uint64_t label);
|
||||
bool ImportOps(std::unique_ptr<ICowOpIter> iter);
|
||||
bool GetDataPos(uint64_t* pos);
|
||||
bool WriteRawData(const void* data, size_t size);
|
||||
bool WriteOperation(const CowOperation& op, const void* data = nullptr, size_t size = 0);
|
||||
|
|
Loading…
Reference in a new issue