Coverage Report

Created: 2026-06-15 06:25

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/read_binary_ir_fuzzer.cc
Line
Count
Source
1
// Copyright 2019 Google LLC
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//      http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#include <cstddef>
16
#include <cstdint>
17
18
#include <fuzzer/FuzzedDataProvider.h>
19
20
#include "wabt/binary-reader-ir.h"
21
#include "wabt/binary-reader.h"
22
#include "wabt/binary-writer.h"
23
#include "wabt/decompiler.h"
24
#include "wabt/ir.h"
25
#include "wabt/option-parser.h"
26
#include "wabt/stream.h"
27
#include "wabt/validator.h"
28
#include "wabt/wat-writer.h"
29
30
20.5k
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
31
20.5k
  wabt::Errors errors;
32
20.5k
  wabt::Module module;
33
20.5k
  wabt::Features features;
34
20.5k
  FuzzedDataProvider data_provider(data, size);
35
20.5k
#define WABT_FEATURE(variable, flag, default_, help) \
36
430k
  if (data_provider.ConsumeBool()) { features.enable_##variable(); }
37
20.5k
#include "wabt/feature.def"
38
20.5k
#undef WABT_FEATURE
39
  // Add only feature related options, but no logging, stop_on_first_error, etc.
40
20.5k
  wabt::ReadBinaryOptions options(features, nullptr, false, false, false);
41
20.5k
  std::vector<uint8_t> text = data_provider.ConsumeRemainingBytes<uint8_t>();
42
20.5k
  if (wabt::Succeeded(wabt::ReadBinaryIr("", text.data(), text.size(), options, &errors, &module))) {
43
7.53k
    wabt::ValidateOptions validate_options(features);
44
7.53k
    if (wabt::Succeeded(wabt::ValidateModule(&module, &errors, validate_options))) {
45
2.57k
      wabt::DecompileOptions decompile_options;
46
2.57k
      wabt::Decompile(module, decompile_options);
47
48
2.57k
      wabt::MemoryStream stream;
49
2.57k
      wabt::WriteBinaryOptions write_binary_options;
50
2.57k
      wabt::WriteBinaryModule(&stream, &module, write_binary_options);
51
52
2.57k
      wabt::WriteWatOptions write_wat_options(features);
53
2.57k
      wabt::WriteWat(&stream, &module, write_wat_options);
54
2.57k
    }
55
7.53k
  }
56
20.5k
  return 0;
57
20.5k
}
58