Coverage Report

Created: 2025-08-26 06:33

/proc/self/cwd/test/message_reader_fuzz_test.cc
Line
Count
Source
1
#include "grpc_transcoding/message_reader.h"
2
3
#include "test_common.h"
4
5
#include <fuzzer/FuzzedDataProvider.h>
6
#include <cstddef>
7
#include <cstdint>
8
#include <string>
9
10
namespace google {
11
namespace grpc {
12
namespace transcoding {
13
namespace testing {
14
namespace {
15
16
700
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
17
700
  FuzzedDataProvider provider(data, size);
18
19
700
  TestZeroCopyInputStream input_stream;
20
700
  MessageReader reader(&input_stream);
21
22
2.77M
  while (provider.remaining_bytes() > 0) {
23
    // Add a few chucks of data to the input stream.
24
4.04M
    for (int i = 0; i < provider.ConsumeIntegralInRange(0, 5); i++) {
25
1.26M
      input_stream.AddChunk(provider.ConsumeRandomLengthString(100));
26
1.26M
    }
27
28
    // Run the message reader to get the next message.
29
2.77M
    (void)reader.NextMessageAndGrpcFrame();
30
31
    // Handle end of input or error due to malformed bytes.
32
2.77M
    if (reader.Finished()) {
33
146
      return 0;
34
146
    }
35
2.77M
  }
36
37
554
  return 0;
38
700
}
39
40
}  // namespace
41
}  // namespace testing
42
}  // namespace transcoding
43
}  // namespace grpc
44
}  // namespace google