Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f6d42d45 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I669a03a6,Ibb774d6d

* changes:
  libsnapshot: Fix footer values and verification
  libsnapshot: Fix some minor formatting bugs
parents 65f4f435 290b0ed4
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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));
+15 −1
Original line number Diff line number Diff line
@@ -154,7 +154,8 @@ bool CowReader::ParseOps() {
            }
        } else if (current_op.type == kCowFooterOp) {
            memcpy(&footer_.op, &current_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";
+4 −2
Original line number Diff line number Diff line
@@ -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)) {
+0 −1
Original line number Diff line number Diff line
@@ -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);