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

Commit 026d8758 authored by Daniel Rosenberg's avatar Daniel Rosenberg Committed by Automerger Merge Worker
Browse files

Merge "libsnapshot: Validate Sequence Op data" am: 3acae545

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1771600

Change-Id: I5da4469b6acd23b9c7d6aeb65de29a73bfd6231b
parents cc4d37ba 3acae545
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -1013,6 +1013,27 @@ TEST_F(CowTest, BigSeqOp) {
    ASSERT_TRUE(iter->Done());
}

TEST_F(CowTest, MissingSeqOp) {
    CowOptions options;
    CowWriter writer(options);
    const int seq_len = 10;
    uint32_t sequence[seq_len];
    for (int i = 0; i < seq_len; i++) {
        sequence[i] = i + 1;
    }

    ASSERT_TRUE(writer.Initialize(cow_->fd));

    ASSERT_TRUE(writer.AddSequenceData(seq_len, sequence));
    ASSERT_TRUE(writer.AddZeroBlocks(1, seq_len - 1));
    ASSERT_TRUE(writer.Finalize());

    ASSERT_EQ(lseek(cow_->fd, 0, SEEK_SET), 0);

    CowReader reader;
    ASSERT_FALSE(reader.Parse(cow_->fd));
}

TEST_F(CowTest, RevMergeOpItrTest) {
    CowOptions options;
    options.cluster_ops = 5;
+7 −0
Original line number Diff line number Diff line
@@ -413,6 +413,13 @@ bool CowReader::PrepMergeOps() {
        }
        block_map->insert({current_op.new_block, i});
    }
    for (auto block : *merge_op_blocks) {
        if (block_map->count(block) == 0) {
            LOG(ERROR) << "Invalid Sequence Ops. Could not find Cow Op for new block " << block;
            return false;
        }
    }

    if (merge_op_blocks->size() > header_.num_merge_ops) {
        num_ordered_ops_to_merge_ = merge_op_blocks->size() - header_.num_merge_ops;
    } else {