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)15void 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