xref: /aosp_15_r20/external/zucchini/fuzzers/fuzz_utils.cc (revision a03ca8b91e029cd15055c20c78c2e087c84792e4)
1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/zucchini/fuzzers/fuzz_utils.h"
6 
7 #include <map>
8 #include <memory>
9 #include <vector>
10 
11 #include "components/zucchini/disassembler.h"
12 
13 namespace zucchini {
14 
ReadAndWriteReferences(std::unique_ptr<zucchini::Disassembler> disassembler,std::vector<uint8_t> * mutable_data)15 void ReadAndWriteReferences(
16     std::unique_ptr<zucchini::Disassembler> disassembler,
17     std::vector<uint8_t>* mutable_data) {
18   zucchini::MutableBufferView mutable_image(mutable_data->data(),
19                                             disassembler->size());
20   std::vector<zucchini::Reference> references;
21   auto groups = disassembler->MakeReferenceGroups();
22   std::map<zucchini::PoolTag, std::vector<zucchini::Reference>>
23       references_of_pool;
24   for (const auto& group : groups) {
25     auto reader = group.GetReader(disassembler.get());
26     std::vector<zucchini::Reference>* refs =
27         &references_of_pool[group.pool_tag()];
28     for (auto ref = reader->GetNext(); ref.has_value();
29          ref = reader->GetNext()) {
30       refs->push_back(ref.value());
31     }
32   }
33   for (const auto& group : groups) {
34     auto writer = group.GetWriter(mutable_image, disassembler.get());
35     for (const auto& ref : references_of_pool[group.pool_tag()])
36       writer->PutNext(ref);
37   }
38 }
39 
40 }  // namespace zucchini
41