Coverage Report

Created: 2026-10-28 07:17

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/curl_fuzzer/proto_fuzzer/profile_fuzzer.h
Line
Count
Source
1
/*
2
 * Copyright (C) Max Dymond, <cmeister2@gmail.com>, et al.
3
 *
4
 * SPDX-License-Identifier: curl
5
 */
6
7
/// @file
8
/// @brief Type-safe libprotobuf-mutator hooks for one generated target profile.
9
10
#ifndef PROTO_FUZZER_PROFILE_FUZZER_H_
11
#define PROTO_FUZZER_PROFILE_FUZZER_H_
12
13
#include <libprotobuf-mutator/src/libfuzzer/libfuzzer_macro.h>
14
15
#include <array>
16
#include <cstddef>
17
#include <cstdint>
18
19
#include "curl_fuzzer.pb.h"
20
#include "proto_fuzzer/target_policy.h"
21
#include "proto_fuzzer/target_profile.h"
22
23
namespace proto_fuzzer {
24
25
/// Ordinary runtime binding for one generated protobuf profile.
26
///
27
/// A single binding owns the target profile and every typed LPM callback. This
28
/// keeps libFuzzer entrypoints non-template while guaranteeing mutation,
29
/// crossover, and loading all use the same concrete protobuf message type.
30
struct ProfileFuzzerTraits {
31
  /// libFuzzer custom-mutator callback for the bound message type.
32
  using CustomMutator = std::size_t (*)(std::uint8_t*, std::size_t, std::size_t, unsigned int);
33
  /// libFuzzer custom-crossover callback for the bound message type.
34
  using CustomCrossOver = std::size_t (*)(const std::uint8_t*, std::size_t, const std::uint8_t*, std::size_t,
35
                                          std::uint8_t*, std::size_t, unsigned int);
36
  /// Parse and lower one input using the bound message type.
37
  using InputLoader = bool (*)(const std::uint8_t*, std::size_t, curl::fuzzer::proto::Scenario*);
38
  /// Optional profiling-only callback that exercises typed mutation helpers.
39
  using MutationProbe = void (*)();
40
41
  /// Runtime policy permanently associated with all callbacks.
42
  TargetProfile profile;
43
  /// Typed mutation callback.
44
  CustomMutator custom_mutator;
45
  /// Typed crossover callback.
46
  CustomCrossOver custom_crossover;
47
  /// Typed parse-and-lower callback.
48
  InputLoader load_input;
49
  /// Timing-profile probe, or nullptr for ordinary profiles.
50
  MutationProbe probe_mutation_helpers;
51
};
52
53
/// Bind all LPM operations for one process to one protobuf message type.
54
///
55
/// Traits must provide:
56
///
57
/// - `using Message` for the generated profile root;
58
/// - `static constexpr TargetProfile kProfile`;
59
/// - `Lower(Message*, curl::fuzzer::proto::Scenario*)`; and
60
/// - `Lift(curl::fuzzer::proto::Scenario*, Message*)`; and
61
/// - `PruneConditionalEligibility(curl::fuzzer::proto::Scenario*,
62
///   TargetProfile)`.
63
///
64
/// Lower and Lift transfer fields directly. They must not serialize, reparse,
65
/// reflection-swap unlike message types, or retain pointers into the source.
66
/// Keeping the same Message in mutation, crossover, and loading is required by
67
/// LPM's process-wide last-mutation cache.
68
template <typename Traits>
69
class ProfileFuzzerHooks {
70
 public:
71
  /// Concrete generated protobuf root for this target profile.
72
  using Message = typename Traits::Message;
73
  /// Shared internal Scenario consumed by the runtime.
74
  using RuntimeScenario = curl::fuzzer::proto::Scenario;
75
76
  /// Register the profile postprocessor before the first LPM operation.
77
245k
  static void EnsurePostProcessor() {
78
245k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
245k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTelnetTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_telnet::FastTelnetScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_telnet::FastTelnetScenario*, unsigned int) const
Line
Count
Source
79
4.40k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFtpTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_ftp::FastFtpScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_ftp::FastFtpScenario*, unsigned int) const
Line
Count
Source
79
6.10k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSmtpTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_smtp::FastSmtpScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_smtp::FastSmtpScenario*, unsigned int) const
Line
Count
Source
79
4.84k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::HttpsH2Traits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::https_h2::HttpsH2Scenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::https_h2::HttpsH2Scenario*, unsigned int) const
Line
Count
Source
79
12.0k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTftpTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_tftp::FastTftpScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_tftp::FastTftpScenario*, unsigned int) const
Line
Count
Source
79
2.23k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastWebSocketTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_websocket::FastWebSocketScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_websocket::FastWebSocketScenario*, unsigned int) const
Line
Count
Source
79
9.14k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastDictTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_dict::FastDictScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_dict::FastDictScenario*, unsigned int) const
Line
Count
Source
79
3.21k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::DeepHttpTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::deep_http::DeepHttpScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::deep_http::DeepHttpScenario*, unsigned int) const
Line
Count
Source
79
12.6k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastIpfsTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_ipfs::FastIpfsScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_ipfs::FastIpfsScenario*, unsigned int) const
Line
Count
Source
79
9.29k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpsTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_https::FastHttpsScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_https::FastHttpsScenario*, unsigned int) const
Line
Count
Source
79
27.2k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastImapTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_imap::FastImapScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_imap::FastImapScenario*, unsigned int) const
Line
Count
Source
79
5.14k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastGopherTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_gopher::FastGopherScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_gopher::FastGopherScenario*, unsigned int) const
Line
Count
Source
79
7.56k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFileTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_file::FastFileScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_file::FastFileScenario*, unsigned int) const
Line
Count
Source
79
3.57k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::TimingTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::timing::TimingScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::timing::TimingScenario*, unsigned int) const
Line
Count
Source
79
10.0k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastPop3Traits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_pop3::FastPop3Scenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_pop3::FastPop3Scenario*, unsigned int) const
Line
Count
Source
79
3.82k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::MultiTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::multi::MultiScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::multi::MultiScenario*, unsigned int) const
Line
Count
Source
79
12.1k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp3Traits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_http3::FastHttp3Scenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_http3::FastHttp3Scenario*, unsigned int) const
Line
Count
Source
79
6.67k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::CompatibilityTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::compatibility::CompatibilityScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::compatibility::CompatibilityScenario*, unsigned int) const
Line
Count
Source
79
12.0k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ResolverTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::resolver::ResolverScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::resolver::ResolverScenario*, unsigned int) const
Line
Count
Source
79
7.85k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ProxyTransportTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::proxy_transport::ProxyTransportScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::proxy_transport::ProxyTransportScenario*, unsigned int) const
Line
Count
Source
79
7.95k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp2Traits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_http2::FastHttp2Scenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_http2::FastHttp2Scenario*, unsigned int) const
Line
Count
Source
79
14.7k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_http::FastHttpScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_http::FastHttpScenario*, unsigned int) const
Line
Count
Source
79
12.2k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ApiTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::api::ApiScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::api::ApiScenario*, unsigned int) const
Line
Count
Source
79
11.7k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastLdapTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_ldap::FastLdapScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_ldap::FastLdapScenario*, unsigned int) const
Line
Count
Source
79
5.76k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastRtspTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_rtsp::FastRtspScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_rtsp::FastRtspScenario*, unsigned int) const
Line
Count
Source
79
6.30k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastMqttTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_mqtt::FastMqttScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_mqtt::FastMqttScenario*, unsigned int) const
Line
Count
Source
79
4.04k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSecureWebSocketTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::fast_secure_websocket::FastSecureWebSocketScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::fast_secure_websocket::FastSecureWebSocketScenario*, unsigned int) const
Line
Count
Source
79
7.34k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::H2ProxyTraits>::EnsurePostProcessor()::{lambda(curl::fuzzer::generated::h2_proxy::H2ProxyScenario*, unsigned int)#1}::operator()(curl::fuzzer::generated::h2_proxy::H2ProxyScenario*, unsigned int) const
Line
Count
Source
79
10.7k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
245k
    (void)registration;
81
245k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTelnetTraits>::EnsurePostProcessor()
Line
Count
Source
77
4.47k
  static void EnsurePostProcessor() {
78
4.47k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
4.47k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
4.47k
    (void)registration;
81
4.47k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFtpTraits>::EnsurePostProcessor()
Line
Count
Source
77
6.18k
  static void EnsurePostProcessor() {
78
6.18k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
6.18k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
6.18k
    (void)registration;
81
6.18k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSmtpTraits>::EnsurePostProcessor()
Line
Count
Source
77
4.98k
  static void EnsurePostProcessor() {
78
4.98k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
4.98k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
4.98k
    (void)registration;
81
4.98k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::HttpsH2Traits>::EnsurePostProcessor()
Line
Count
Source
77
12.3k
  static void EnsurePostProcessor() {
78
12.3k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
12.3k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
12.3k
    (void)registration;
81
12.3k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTftpTraits>::EnsurePostProcessor()
Line
Count
Source
77
2.28k
  static void EnsurePostProcessor() {
78
2.28k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
2.28k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
2.28k
    (void)registration;
81
2.28k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastWebSocketTraits>::EnsurePostProcessor()
Line
Count
Source
77
9.25k
  static void EnsurePostProcessor() {
78
9.25k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
9.25k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
9.25k
    (void)registration;
81
9.25k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastDictTraits>::EnsurePostProcessor()
Line
Count
Source
77
3.26k
  static void EnsurePostProcessor() {
78
3.26k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
3.26k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
3.26k
    (void)registration;
81
3.26k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::DeepHttpTraits>::EnsurePostProcessor()
Line
Count
Source
77
12.8k
  static void EnsurePostProcessor() {
78
12.8k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
12.8k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
12.8k
    (void)registration;
81
12.8k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastIpfsTraits>::EnsurePostProcessor()
Line
Count
Source
77
9.35k
  static void EnsurePostProcessor() {
78
9.35k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
9.35k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
9.35k
    (void)registration;
81
9.35k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpsTraits>::EnsurePostProcessor()
Line
Count
Source
77
27.7k
  static void EnsurePostProcessor() {
78
27.7k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
27.7k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
27.7k
    (void)registration;
81
27.7k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastImapTraits>::EnsurePostProcessor()
Line
Count
Source
77
5.28k
  static void EnsurePostProcessor() {
78
5.28k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
5.28k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
5.28k
    (void)registration;
81
5.28k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastGopherTraits>::EnsurePostProcessor()
Line
Count
Source
77
7.65k
  static void EnsurePostProcessor() {
78
7.65k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
7.65k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
7.65k
    (void)registration;
81
7.65k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFileTraits>::EnsurePostProcessor()
Line
Count
Source
77
3.61k
  static void EnsurePostProcessor() {
78
3.61k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
3.61k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
3.61k
    (void)registration;
81
3.61k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::TimingTraits>::EnsurePostProcessor()
Line
Count
Source
77
10.2k
  static void EnsurePostProcessor() {
78
10.2k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
10.2k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
10.2k
    (void)registration;
81
10.2k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastPop3Traits>::EnsurePostProcessor()
Line
Count
Source
77
3.88k
  static void EnsurePostProcessor() {
78
3.88k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
3.88k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
3.88k
    (void)registration;
81
3.88k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::MultiTraits>::EnsurePostProcessor()
Line
Count
Source
77
12.3k
  static void EnsurePostProcessor() {
78
12.3k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
12.3k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
12.3k
    (void)registration;
81
12.3k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp3Traits>::EnsurePostProcessor()
Line
Count
Source
77
6.98k
  static void EnsurePostProcessor() {
78
6.98k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
6.98k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
6.98k
    (void)registration;
81
6.98k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::CompatibilityTraits>::EnsurePostProcessor()
Line
Count
Source
77
12.3k
  static void EnsurePostProcessor() {
78
12.3k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
12.3k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
12.3k
    (void)registration;
81
12.3k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ResolverTraits>::EnsurePostProcessor()
Line
Count
Source
77
8.14k
  static void EnsurePostProcessor() {
78
8.14k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
8.14k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
8.14k
    (void)registration;
81
8.14k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ProxyTransportTraits>::EnsurePostProcessor()
Line
Count
Source
77
7.99k
  static void EnsurePostProcessor() {
78
7.99k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
7.99k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
7.99k
    (void)registration;
81
7.99k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp2Traits>::EnsurePostProcessor()
Line
Count
Source
77
15.0k
  static void EnsurePostProcessor() {
78
15.0k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
15.0k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
15.0k
    (void)registration;
81
15.0k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpTraits>::EnsurePostProcessor()
Line
Count
Source
77
12.2k
  static void EnsurePostProcessor() {
78
12.2k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
12.2k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
12.2k
    (void)registration;
81
12.2k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ApiTraits>::EnsurePostProcessor()
Line
Count
Source
77
11.9k
  static void EnsurePostProcessor() {
78
11.9k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
11.9k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
11.9k
    (void)registration;
81
11.9k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastLdapTraits>::EnsurePostProcessor()
Line
Count
Source
77
5.82k
  static void EnsurePostProcessor() {
78
5.82k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
5.82k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
5.82k
    (void)registration;
81
5.82k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastRtspTraits>::EnsurePostProcessor()
Line
Count
Source
77
6.38k
  static void EnsurePostProcessor() {
78
6.38k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
6.38k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
6.38k
    (void)registration;
81
6.38k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastMqttTraits>::EnsurePostProcessor()
Line
Count
Source
77
4.11k
  static void EnsurePostProcessor() {
78
4.11k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
4.11k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
4.11k
    (void)registration;
81
4.11k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSecureWebSocketTraits>::EnsurePostProcessor()
Line
Count
Source
77
7.47k
  static void EnsurePostProcessor() {
78
7.47k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
7.47k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
7.47k
    (void)registration;
81
7.47k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::H2ProxyTraits>::EnsurePostProcessor()
Line
Count
Source
77
10.8k
  static void EnsurePostProcessor() {
78
10.8k
    static const protobuf_mutator::libfuzzer::PostProcessorRegistration<Message> registration(
79
10.8k
        [](Message* message, unsigned int /*seed*/) { NormalizeMessage(message); });
80
10.8k
    (void)registration;
81
10.8k
  }
82
83
  /// Remove unknown wire data, normalize through the common runtime model,
84
  /// and lift back into the same generated profile type.
85
  /// @param message Generated profile message to normalize in place.
86
240k
  static void NormalizeMessage(Message* message) {
87
240k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
240k
    message->DiscardUnknownFields();
92
240k
    RuntimeScenario runtime;
93
240k
    Traits::Lower(message, &runtime);
94
240k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
228k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
228k
    }
97
240k
    message->Clear();
98
240k
    Traits::Lift(&runtime, message);
99
240k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTelnetTraits>::NormalizeMessage(curl::fuzzer::generated::fast_telnet::FastTelnetScenario*)
Line
Count
Source
86
4.40k
  static void NormalizeMessage(Message* message) {
87
4.40k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
4.40k
    message->DiscardUnknownFields();
92
4.40k
    RuntimeScenario runtime;
93
4.40k
    Traits::Lower(message, &runtime);
94
4.40k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
4.40k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
4.40k
    }
97
4.40k
    message->Clear();
98
4.40k
    Traits::Lift(&runtime, message);
99
4.40k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFtpTraits>::NormalizeMessage(curl::fuzzer::generated::fast_ftp::FastFtpScenario*)
Line
Count
Source
86
6.10k
  static void NormalizeMessage(Message* message) {
87
6.10k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
6.10k
    message->DiscardUnknownFields();
92
6.10k
    RuntimeScenario runtime;
93
6.10k
    Traits::Lower(message, &runtime);
94
6.10k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
6.10k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
6.10k
    }
97
6.10k
    message->Clear();
98
6.10k
    Traits::Lift(&runtime, message);
99
6.10k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSmtpTraits>::NormalizeMessage(curl::fuzzer::generated::fast_smtp::FastSmtpScenario*)
Line
Count
Source
86
4.84k
  static void NormalizeMessage(Message* message) {
87
4.84k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
4.84k
    message->DiscardUnknownFields();
92
4.84k
    RuntimeScenario runtime;
93
4.84k
    Traits::Lower(message, &runtime);
94
4.84k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
4.84k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
4.84k
    }
97
4.84k
    message->Clear();
98
4.84k
    Traits::Lift(&runtime, message);
99
4.84k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::HttpsH2Traits>::NormalizeMessage(curl::fuzzer::generated::https_h2::HttpsH2Scenario*)
Line
Count
Source
86
12.0k
  static void NormalizeMessage(Message* message) {
87
12.0k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
12.0k
    message->DiscardUnknownFields();
92
12.0k
    RuntimeScenario runtime;
93
12.0k
    Traits::Lower(message, &runtime);
94
12.0k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
12.0k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
12.0k
    }
97
12.0k
    message->Clear();
98
12.0k
    Traits::Lift(&runtime, message);
99
12.0k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTftpTraits>::NormalizeMessage(curl::fuzzer::generated::fast_tftp::FastTftpScenario*)
Line
Count
Source
86
2.23k
  static void NormalizeMessage(Message* message) {
87
2.23k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
2.23k
    message->DiscardUnknownFields();
92
2.23k
    RuntimeScenario runtime;
93
2.23k
    Traits::Lower(message, &runtime);
94
2.23k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
2.23k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
2.23k
    }
97
2.23k
    message->Clear();
98
2.23k
    Traits::Lift(&runtime, message);
99
2.23k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastWebSocketTraits>::NormalizeMessage(curl::fuzzer::generated::fast_websocket::FastWebSocketScenario*)
Line
Count
Source
86
9.14k
  static void NormalizeMessage(Message* message) {
87
9.14k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
9.14k
    message->DiscardUnknownFields();
92
9.14k
    RuntimeScenario runtime;
93
9.14k
    Traits::Lower(message, &runtime);
94
9.14k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
9.14k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
9.14k
    }
97
9.14k
    message->Clear();
98
9.14k
    Traits::Lift(&runtime, message);
99
9.14k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastDictTraits>::NormalizeMessage(curl::fuzzer::generated::fast_dict::FastDictScenario*)
Line
Count
Source
86
3.21k
  static void NormalizeMessage(Message* message) {
87
3.21k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
3.21k
    message->DiscardUnknownFields();
92
3.21k
    RuntimeScenario runtime;
93
3.21k
    Traits::Lower(message, &runtime);
94
3.21k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
3.21k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
3.21k
    }
97
3.21k
    message->Clear();
98
3.21k
    Traits::Lift(&runtime, message);
99
3.21k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::DeepHttpTraits>::NormalizeMessage(curl::fuzzer::generated::deep_http::DeepHttpScenario*)
Line
Count
Source
86
12.6k
  static void NormalizeMessage(Message* message) {
87
12.6k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
12.6k
    message->DiscardUnknownFields();
92
12.6k
    RuntimeScenario runtime;
93
12.6k
    Traits::Lower(message, &runtime);
94
12.6k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
12.6k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
12.6k
    }
97
12.6k
    message->Clear();
98
12.6k
    Traits::Lift(&runtime, message);
99
12.6k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastIpfsTraits>::NormalizeMessage(curl::fuzzer::generated::fast_ipfs::FastIpfsScenario*)
Line
Count
Source
86
9.29k
  static void NormalizeMessage(Message* message) {
87
9.29k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
9.29k
    message->DiscardUnknownFields();
92
9.29k
    RuntimeScenario runtime;
93
9.29k
    Traits::Lower(message, &runtime);
94
9.29k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
9.29k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
9.29k
    }
97
9.29k
    message->Clear();
98
9.29k
    Traits::Lift(&runtime, message);
99
9.29k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpsTraits>::NormalizeMessage(curl::fuzzer::generated::fast_https::FastHttpsScenario*)
Line
Count
Source
86
27.2k
  static void NormalizeMessage(Message* message) {
87
27.2k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
27.2k
    message->DiscardUnknownFields();
92
27.2k
    RuntimeScenario runtime;
93
27.2k
    Traits::Lower(message, &runtime);
94
27.2k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
27.2k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
27.2k
    }
97
27.2k
    message->Clear();
98
27.2k
    Traits::Lift(&runtime, message);
99
27.2k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastImapTraits>::NormalizeMessage(curl::fuzzer::generated::fast_imap::FastImapScenario*)
Line
Count
Source
86
5.14k
  static void NormalizeMessage(Message* message) {
87
5.14k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
5.14k
    message->DiscardUnknownFields();
92
5.14k
    RuntimeScenario runtime;
93
5.14k
    Traits::Lower(message, &runtime);
94
5.14k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
5.14k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
5.14k
    }
97
5.14k
    message->Clear();
98
5.14k
    Traits::Lift(&runtime, message);
99
5.14k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastGopherTraits>::NormalizeMessage(curl::fuzzer::generated::fast_gopher::FastGopherScenario*)
Line
Count
Source
86
7.56k
  static void NormalizeMessage(Message* message) {
87
7.56k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
7.56k
    message->DiscardUnknownFields();
92
7.56k
    RuntimeScenario runtime;
93
7.56k
    Traits::Lower(message, &runtime);
94
7.56k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
7.56k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
7.56k
    }
97
7.56k
    message->Clear();
98
7.56k
    Traits::Lift(&runtime, message);
99
7.56k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFileTraits>::NormalizeMessage(curl::fuzzer::generated::fast_file::FastFileScenario*)
Line
Count
Source
86
3.57k
  static void NormalizeMessage(Message* message) {
87
3.57k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
3.57k
    message->DiscardUnknownFields();
92
3.57k
    RuntimeScenario runtime;
93
3.57k
    Traits::Lower(message, &runtime);
94
3.57k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
3.57k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
3.57k
    }
97
3.57k
    message->Clear();
98
3.57k
    Traits::Lift(&runtime, message);
99
3.57k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::TimingTraits>::NormalizeMessage(curl::fuzzer::generated::timing::TimingScenario*)
Line
Count
Source
86
10.0k
  static void NormalizeMessage(Message* message) {
87
10.0k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
10.0k
    message->DiscardUnknownFields();
92
10.0k
    RuntimeScenario runtime;
93
10.0k
    Traits::Lower(message, &runtime);
94
10.0k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
10.0k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
10.0k
    }
97
10.0k
    message->Clear();
98
10.0k
    Traits::Lift(&runtime, message);
99
10.0k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastPop3Traits>::NormalizeMessage(curl::fuzzer::generated::fast_pop3::FastPop3Scenario*)
Line
Count
Source
86
3.82k
  static void NormalizeMessage(Message* message) {
87
3.82k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
3.82k
    message->DiscardUnknownFields();
92
3.82k
    RuntimeScenario runtime;
93
3.82k
    Traits::Lower(message, &runtime);
94
3.82k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
3.82k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
3.82k
    }
97
3.82k
    message->Clear();
98
3.82k
    Traits::Lift(&runtime, message);
99
3.82k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::MultiTraits>::NormalizeMessage(curl::fuzzer::generated::multi::MultiScenario*)
Line
Count
Source
86
12.1k
  static void NormalizeMessage(Message* message) {
87
12.1k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
12.1k
    message->DiscardUnknownFields();
92
12.1k
    RuntimeScenario runtime;
93
12.1k
    Traits::Lower(message, &runtime);
94
12.1k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
12.1k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
12.1k
    }
97
12.1k
    message->Clear();
98
12.1k
    Traits::Lift(&runtime, message);
99
12.1k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp3Traits>::NormalizeMessage(curl::fuzzer::generated::fast_http3::FastHttp3Scenario*)
Line
Count
Source
86
6.67k
  static void NormalizeMessage(Message* message) {
87
6.67k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
6.67k
    message->DiscardUnknownFields();
92
6.67k
    RuntimeScenario runtime;
93
6.67k
    Traits::Lower(message, &runtime);
94
6.67k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
6.67k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
6.67k
    }
97
6.67k
    message->Clear();
98
6.67k
    Traits::Lift(&runtime, message);
99
6.67k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::CompatibilityTraits>::NormalizeMessage(curl::fuzzer::generated::compatibility::CompatibilityScenario*)
Line
Count
Source
86
12.0k
  static void NormalizeMessage(Message* message) {
87
12.0k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
12.0k
    message->DiscardUnknownFields();
92
12.0k
    RuntimeScenario runtime;
93
12.0k
    Traits::Lower(message, &runtime);
94
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
    }
97
12.0k
    message->Clear();
98
12.0k
    Traits::Lift(&runtime, message);
99
12.0k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ResolverTraits>::NormalizeMessage(curl::fuzzer::generated::resolver::ResolverScenario*)
Line
Count
Source
86
7.85k
  static void NormalizeMessage(Message* message) {
87
7.85k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
7.85k
    message->DiscardUnknownFields();
92
7.85k
    RuntimeScenario runtime;
93
7.85k
    Traits::Lower(message, &runtime);
94
7.85k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
7.85k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
7.85k
    }
97
7.85k
    message->Clear();
98
7.85k
    Traits::Lift(&runtime, message);
99
7.85k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ProxyTransportTraits>::NormalizeMessage(curl::fuzzer::generated::proxy_transport::ProxyTransportScenario*)
Line
Count
Source
86
7.95k
  static void NormalizeMessage(Message* message) {
87
7.95k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
7.95k
    message->DiscardUnknownFields();
92
7.95k
    RuntimeScenario runtime;
93
7.95k
    Traits::Lower(message, &runtime);
94
7.95k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
7.95k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
7.95k
    }
97
7.95k
    message->Clear();
98
7.95k
    Traits::Lift(&runtime, message);
99
7.95k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp2Traits>::NormalizeMessage(curl::fuzzer::generated::fast_http2::FastHttp2Scenario*)
Line
Count
Source
86
14.7k
  static void NormalizeMessage(Message* message) {
87
14.7k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
14.7k
    message->DiscardUnknownFields();
92
14.7k
    RuntimeScenario runtime;
93
14.7k
    Traits::Lower(message, &runtime);
94
14.7k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
14.7k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
14.7k
    }
97
14.7k
    message->Clear();
98
14.7k
    Traits::Lift(&runtime, message);
99
14.7k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpTraits>::NormalizeMessage(curl::fuzzer::generated::fast_http::FastHttpScenario*)
Line
Count
Source
86
12.2k
  static void NormalizeMessage(Message* message) {
87
12.2k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
12.2k
    message->DiscardUnknownFields();
92
12.2k
    RuntimeScenario runtime;
93
12.2k
    Traits::Lower(message, &runtime);
94
12.2k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
12.2k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
12.2k
    }
97
12.2k
    message->Clear();
98
12.2k
    Traits::Lift(&runtime, message);
99
12.2k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ApiTraits>::NormalizeMessage(curl::fuzzer::generated::api::ApiScenario*)
Line
Count
Source
86
11.7k
  static void NormalizeMessage(Message* message) {
87
11.7k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
11.7k
    message->DiscardUnknownFields();
92
11.7k
    RuntimeScenario runtime;
93
11.7k
    Traits::Lower(message, &runtime);
94
11.7k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
11.7k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
11.7k
    }
97
11.7k
    message->Clear();
98
11.7k
    Traits::Lift(&runtime, message);
99
11.7k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastLdapTraits>::NormalizeMessage(curl::fuzzer::generated::fast_ldap::FastLdapScenario*)
Line
Count
Source
86
5.76k
  static void NormalizeMessage(Message* message) {
87
5.76k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
5.76k
    message->DiscardUnknownFields();
92
5.76k
    RuntimeScenario runtime;
93
5.76k
    Traits::Lower(message, &runtime);
94
5.76k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
5.76k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
5.76k
    }
97
5.76k
    message->Clear();
98
5.76k
    Traits::Lift(&runtime, message);
99
5.76k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastRtspTraits>::NormalizeMessage(curl::fuzzer::generated::fast_rtsp::FastRtspScenario*)
Line
Count
Source
86
6.30k
  static void NormalizeMessage(Message* message) {
87
6.30k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
6.30k
    message->DiscardUnknownFields();
92
6.30k
    RuntimeScenario runtime;
93
6.30k
    Traits::Lower(message, &runtime);
94
6.30k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
6.30k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
6.30k
    }
97
6.30k
    message->Clear();
98
6.30k
    Traits::Lift(&runtime, message);
99
6.30k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastMqttTraits>::NormalizeMessage(curl::fuzzer::generated::fast_mqtt::FastMqttScenario*)
Line
Count
Source
86
4.04k
  static void NormalizeMessage(Message* message) {
87
4.04k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
4.04k
    message->DiscardUnknownFields();
92
4.04k
    RuntimeScenario runtime;
93
4.04k
    Traits::Lower(message, &runtime);
94
4.04k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
4.04k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
4.04k
    }
97
4.04k
    message->Clear();
98
4.04k
    Traits::Lift(&runtime, message);
99
4.04k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSecureWebSocketTraits>::NormalizeMessage(curl::fuzzer::generated::fast_secure_websocket::FastSecureWebSocketScenario*)
Line
Count
Source
86
7.34k
  static void NormalizeMessage(Message* message) {
87
7.34k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
7.34k
    message->DiscardUnknownFields();
92
7.34k
    RuntimeScenario runtime;
93
7.34k
    Traits::Lower(message, &runtime);
94
7.34k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
7.34k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
7.34k
    }
97
7.34k
    message->Clear();
98
7.34k
    Traits::Lift(&runtime, message);
99
7.34k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::H2ProxyTraits>::NormalizeMessage(curl::fuzzer::generated::h2_proxy::H2ProxyScenario*)
Line
Count
Source
86
10.7k
  static void NormalizeMessage(Message* message) {
87
10.7k
    if (message == nullptr) {
88
0
      return;
89
0
    }
90
91
10.7k
    message->DiscardUnknownFields();
92
10.7k
    RuntimeScenario runtime;
93
10.7k
    Traits::Lower(message, &runtime);
94
10.7k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
95
10.7k
      NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
96
10.7k
    }
97
10.7k
    message->Clear();
98
10.7k
    Traits::Lift(&runtime, message);
99
10.7k
  }
100
101
  /// Mutate a binary profile message and retain its exact type in LPM's cache.
102
  /// @param data Serialized profile message buffer to mutate in place.
103
  /// @param size Number of input bytes currently stored in `data`.
104
  /// @param max_size Capacity of `data` available for the mutated message.
105
  /// @param seed Deterministic mutation seed supplied by libFuzzer.
106
  /// @return Number of serialized bytes in the mutated message.
107
1
  static std::size_t CustomMutator(std::uint8_t* data, std::size_t size, std::size_t max_size, unsigned int seed) {
108
1
    EnsurePostProcessor();
109
1
    Message message;
110
1
    return protobuf_mutator::libfuzzer::CustomProtoMutator(true, data, size, max_size, seed, &message);
111
1
  }
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTelnetTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFtpTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSmtpTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::HttpsH2Traits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTftpTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastWebSocketTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastDictTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::DeepHttpTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastIpfsTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpsTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastImapTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastGopherTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFileTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::TimingTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Line
Count
Source
107
1
  static std::size_t CustomMutator(std::uint8_t* data, std::size_t size, std::size_t max_size, unsigned int seed) {
108
1
    EnsurePostProcessor();
109
1
    Message message;
110
1
    return protobuf_mutator::libfuzzer::CustomProtoMutator(true, data, size, max_size, seed, &message);
111
1
  }
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastPop3Traits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::MultiTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp3Traits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::CompatibilityTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ResolverTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ProxyTransportTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp2Traits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ApiTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastLdapTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastRtspTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastMqttTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSecureWebSocketTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::H2ProxyTraits>::CustomMutator(unsigned char*, unsigned long, unsigned long, unsigned int)
112
113
  /// Cross two binary profile messages using the same type as mutation/load.
114
  /// @param data1 Serialized first parent message.
115
  /// @param size1 Number of bytes in `data1`.
116
  /// @param data2 Serialized second parent message.
117
  /// @param size2 Number of bytes in `data2`.
118
  /// @param out Destination buffer for the crossed message.
119
  /// @param max_out_size Capacity of `out`.
120
  /// @param seed Deterministic crossover seed supplied by libFuzzer.
121
  /// @return Number of serialized bytes written to `out`.
122
  static std::size_t CustomCrossOver(const std::uint8_t* data1, std::size_t size1, const std::uint8_t* data2,
123
                                     std::size_t size2, std::uint8_t* out, std::size_t max_out_size,
124
1
                                     unsigned int seed) {
125
1
    EnsurePostProcessor();
126
1
    Message message1;
127
1
    Message message2;
128
1
    return protobuf_mutator::libfuzzer::CustomProtoCrossOver(true, data1, size1, data2, size2, out, max_out_size, seed,
129
1
                                                             &message1, &message2);
130
1
  }
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTelnetTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFtpTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSmtpTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::HttpsH2Traits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTftpTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastWebSocketTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastDictTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::DeepHttpTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastIpfsTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpsTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastImapTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastGopherTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFileTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::TimingTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Line
Count
Source
124
1
                                     unsigned int seed) {
125
1
    EnsurePostProcessor();
126
1
    Message message1;
127
1
    Message message2;
128
1
    return protobuf_mutator::libfuzzer::CustomProtoCrossOver(true, data1, size1, data2, size2, out, max_out_size, seed,
129
1
                                                             &message1, &message2);
130
1
  }
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastPop3Traits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::MultiTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp3Traits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::CompatibilityTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ResolverTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ProxyTransportTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp2Traits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ApiTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastLdapTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastRtspTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastMqttTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSecureWebSocketTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::H2ProxyTraits>::CustomCrossOver(unsigned char const*, unsigned long, unsigned char const*, unsigned long, unsigned char*, unsigned long, unsigned int)
131
132
  /// Load one binary profile message and transfer it into owned runtime state.
133
  ///
134
  /// This deliberately uses LPM's ordinary input unchanged. On a cache hit,
135
  /// the cached Message is the same concrete type used above; on a parse path,
136
  /// LPM invokes the registered postprocessor before this direct lowering.
137
  /// @param data Serialized profile message bytes.
138
  /// @param size Number of bytes available at `data`.
139
  /// @param runtime Destination for the owned, lowered runtime Scenario.
140
  /// @return Whether the input loaded and lowered successfully.
141
245k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
245k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
245k
    EnsurePostProcessor();
147
245k
    Message message;
148
245k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
4.39k
      return false;
150
4.39k
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
240k
    message.DiscardUnknownFields();
156
240k
    runtime->Clear();
157
240k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
240k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
228k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
228k
    }
165
240k
    return true;
166
245k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTelnetTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
4.47k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
4.47k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
4.47k
    EnsurePostProcessor();
147
4.47k
    Message message;
148
4.47k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
68
      return false;
150
68
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
4.40k
    message.DiscardUnknownFields();
156
4.40k
    runtime->Clear();
157
4.40k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
4.40k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
4.40k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
4.40k
    }
165
4.40k
    return true;
166
4.47k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFtpTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
6.18k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
6.18k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
6.18k
    EnsurePostProcessor();
147
6.18k
    Message message;
148
6.18k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
86
      return false;
150
86
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
6.10k
    message.DiscardUnknownFields();
156
6.10k
    runtime->Clear();
157
6.10k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
6.10k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
6.10k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
6.10k
    }
165
6.10k
    return true;
166
6.18k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSmtpTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
4.98k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
4.98k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
4.98k
    EnsurePostProcessor();
147
4.98k
    Message message;
148
4.98k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
143
      return false;
150
143
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
4.84k
    message.DiscardUnknownFields();
156
4.84k
    runtime->Clear();
157
4.84k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
4.84k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
4.84k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
4.84k
    }
165
4.84k
    return true;
166
4.98k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::HttpsH2Traits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
12.3k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
12.3k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
12.3k
    EnsurePostProcessor();
147
12.3k
    Message message;
148
12.3k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
351
      return false;
150
351
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
12.0k
    message.DiscardUnknownFields();
156
12.0k
    runtime->Clear();
157
12.0k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
12.0k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
12.0k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
12.0k
    }
165
12.0k
    return true;
166
12.3k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastTftpTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
2.28k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
2.28k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
2.28k
    EnsurePostProcessor();
147
2.28k
    Message message;
148
2.28k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
50
      return false;
150
50
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
2.23k
    message.DiscardUnknownFields();
156
2.23k
    runtime->Clear();
157
2.23k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
2.23k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
2.23k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
2.23k
    }
165
2.23k
    return true;
166
2.28k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastWebSocketTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
9.25k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
9.25k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
9.25k
    EnsurePostProcessor();
147
9.25k
    Message message;
148
9.25k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
113
      return false;
150
113
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
9.14k
    message.DiscardUnknownFields();
156
9.14k
    runtime->Clear();
157
9.14k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
9.14k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
9.14k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
9.14k
    }
165
9.14k
    return true;
166
9.25k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastDictTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
3.26k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
3.26k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
3.26k
    EnsurePostProcessor();
147
3.26k
    Message message;
148
3.26k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
52
      return false;
150
52
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
3.21k
    message.DiscardUnknownFields();
156
3.21k
    runtime->Clear();
157
3.21k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
3.21k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
3.21k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
3.21k
    }
165
3.21k
    return true;
166
3.26k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::DeepHttpTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
12.8k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
12.8k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
12.8k
    EnsurePostProcessor();
147
12.8k
    Message message;
148
12.8k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
157
      return false;
150
157
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
12.6k
    message.DiscardUnknownFields();
156
12.6k
    runtime->Clear();
157
12.6k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
12.6k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
12.6k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
12.6k
    }
165
12.6k
    return true;
166
12.8k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastIpfsTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
9.35k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
9.35k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
9.35k
    EnsurePostProcessor();
147
9.35k
    Message message;
148
9.35k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
57
      return false;
150
57
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
9.29k
    message.DiscardUnknownFields();
156
9.29k
    runtime->Clear();
157
9.29k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
9.29k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
9.29k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
9.29k
    }
165
9.29k
    return true;
166
9.35k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpsTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
27.7k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
27.7k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
27.7k
    EnsurePostProcessor();
147
27.7k
    Message message;
148
27.7k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
529
      return false;
150
529
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
27.2k
    message.DiscardUnknownFields();
156
27.2k
    runtime->Clear();
157
27.2k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
27.2k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
27.2k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
27.2k
    }
165
27.2k
    return true;
166
27.7k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastImapTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
5.28k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
5.28k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
5.28k
    EnsurePostProcessor();
147
5.28k
    Message message;
148
5.28k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
139
      return false;
150
139
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
5.14k
    message.DiscardUnknownFields();
156
5.14k
    runtime->Clear();
157
5.14k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
5.14k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
5.14k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
5.14k
    }
165
5.14k
    return true;
166
5.28k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastGopherTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
7.65k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
7.65k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
7.65k
    EnsurePostProcessor();
147
7.65k
    Message message;
148
7.65k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
92
      return false;
150
92
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
7.56k
    message.DiscardUnknownFields();
156
7.56k
    runtime->Clear();
157
7.56k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
7.56k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
7.56k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
7.56k
    }
165
7.56k
    return true;
166
7.65k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastFileTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
3.61k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
3.61k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
3.61k
    EnsurePostProcessor();
147
3.61k
    Message message;
148
3.61k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
34
      return false;
150
34
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
3.57k
    message.DiscardUnknownFields();
156
3.57k
    runtime->Clear();
157
3.57k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
3.57k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
3.57k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
3.57k
    }
165
3.57k
    return true;
166
3.61k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::TimingTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
10.2k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
10.2k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
10.2k
    EnsurePostProcessor();
147
10.2k
    Message message;
148
10.2k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
203
      return false;
150
203
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
10.0k
    message.DiscardUnknownFields();
156
10.0k
    runtime->Clear();
157
10.0k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
10.0k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
10.0k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
10.0k
    }
165
10.0k
    return true;
166
10.2k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastPop3Traits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
3.88k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
3.88k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
3.88k
    EnsurePostProcessor();
147
3.88k
    Message message;
148
3.88k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
62
      return false;
150
62
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
3.82k
    message.DiscardUnknownFields();
156
3.82k
    runtime->Clear();
157
3.82k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
3.82k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
3.82k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
3.82k
    }
165
3.82k
    return true;
166
3.88k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::MultiTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
12.3k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
12.3k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
12.3k
    EnsurePostProcessor();
147
12.3k
    Message message;
148
12.3k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
195
      return false;
150
195
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
12.1k
    message.DiscardUnknownFields();
156
12.1k
    runtime->Clear();
157
12.1k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
12.1k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
12.1k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
12.1k
    }
165
12.1k
    return true;
166
12.3k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp3Traits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
6.98k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
6.98k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
6.98k
    EnsurePostProcessor();
147
6.98k
    Message message;
148
6.98k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
303
      return false;
150
303
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
6.67k
    message.DiscardUnknownFields();
156
6.67k
    runtime->Clear();
157
6.67k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
6.67k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
6.67k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
6.67k
    }
165
6.67k
    return true;
166
6.98k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::CompatibilityTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
12.3k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
12.3k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
12.3k
    EnsurePostProcessor();
147
12.3k
    Message message;
148
12.3k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
369
      return false;
150
369
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
12.0k
    message.DiscardUnknownFields();
156
12.0k
    runtime->Clear();
157
12.0k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
    }
165
12.0k
    return true;
166
12.3k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ResolverTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
8.14k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
8.14k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
8.14k
    EnsurePostProcessor();
147
8.14k
    Message message;
148
8.14k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
285
      return false;
150
285
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
7.85k
    message.DiscardUnknownFields();
156
7.85k
    runtime->Clear();
157
7.85k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
7.85k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
7.85k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
7.85k
    }
165
7.85k
    return true;
166
8.14k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ProxyTransportTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
7.99k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
7.99k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
7.99k
    EnsurePostProcessor();
147
7.99k
    Message message;
148
7.99k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
44
      return false;
150
44
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
7.95k
    message.DiscardUnknownFields();
156
7.95k
    runtime->Clear();
157
7.95k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
7.95k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
7.95k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
7.95k
    }
165
7.95k
    return true;
166
7.99k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttp2Traits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
15.0k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
15.0k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
15.0k
    EnsurePostProcessor();
147
15.0k
    Message message;
148
15.0k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
368
      return false;
150
368
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
14.7k
    message.DiscardUnknownFields();
156
14.7k
    runtime->Clear();
157
14.7k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
14.7k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
14.7k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
14.7k
    }
165
14.7k
    return true;
166
15.0k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastHttpTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
12.2k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
12.2k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
12.2k
    EnsurePostProcessor();
147
12.2k
    Message message;
148
12.2k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
52
      return false;
150
52
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
12.2k
    message.DiscardUnknownFields();
156
12.2k
    runtime->Clear();
157
12.2k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
12.2k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
12.2k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
12.2k
    }
165
12.2k
    return true;
166
12.2k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::ApiTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
11.9k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
11.9k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
11.9k
    EnsurePostProcessor();
147
11.9k
    Message message;
148
11.9k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
185
      return false;
150
185
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
11.7k
    message.DiscardUnknownFields();
156
11.7k
    runtime->Clear();
157
11.7k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
11.7k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
11.7k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
11.7k
    }
165
11.7k
    return true;
166
11.9k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastLdapTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
5.82k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
5.82k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
5.82k
    EnsurePostProcessor();
147
5.82k
    Message message;
148
5.82k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
56
      return false;
150
56
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
5.76k
    message.DiscardUnknownFields();
156
5.76k
    runtime->Clear();
157
5.76k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
5.76k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
5.76k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
5.76k
    }
165
5.76k
    return true;
166
5.82k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastRtspTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
6.38k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
6.38k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
6.38k
    EnsurePostProcessor();
147
6.38k
    Message message;
148
6.38k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
76
      return false;
150
76
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
6.30k
    message.DiscardUnknownFields();
156
6.30k
    runtime->Clear();
157
6.30k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
6.30k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
6.30k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
6.30k
    }
165
6.30k
    return true;
166
6.38k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastMqttTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
4.11k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
4.11k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
4.11k
    EnsurePostProcessor();
147
4.11k
    Message message;
148
4.11k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
65
      return false;
150
65
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
4.04k
    message.DiscardUnknownFields();
156
4.04k
    runtime->Clear();
157
4.04k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
4.04k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
4.04k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
4.04k
    }
165
4.04k
    return true;
166
4.11k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::FastSecureWebSocketTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
7.47k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
7.47k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
7.47k
    EnsurePostProcessor();
147
7.47k
    Message message;
148
7.47k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
122
      return false;
150
122
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
7.34k
    message.DiscardUnknownFields();
156
7.34k
    runtime->Clear();
157
7.34k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
7.34k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
7.34k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
7.34k
    }
165
7.34k
    return true;
166
7.47k
  }
proto_fuzzer::ProfileFuzzerHooks<proto_fuzzer::generated::H2ProxyTraits>::LoadAndLower(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
141
10.8k
  static bool LoadAndLower(const std::uint8_t* data, std::size_t size, RuntimeScenario* runtime) {
142
10.8k
    if (runtime == nullptr) {
143
0
      return false;
144
0
    }
145
146
10.8k
    EnsurePostProcessor();
147
10.8k
    Message message;
148
10.8k
    if (!protobuf_mutator::libfuzzer::LoadProtoInput(true, data, size, &message)) {
149
140
      return false;
150
140
    }
151
152
    // Mutated inputs have already passed the postprocessor before entering
153
    // LPM's cache. Parsed inputs pass it in Fix(). Discarding once more is
154
    // harmless and makes the lowering boundary fail closed for either path.
155
10.7k
    message.DiscardUnknownFields();
156
10.7k
    runtime->Clear();
157
10.7k
    Traits::Lower(&message, runtime);
158
    // A projected profile root intentionally cannot carry policy-owned state
159
    // such as a fixed scheme. The postprocessor normalized that state before
160
    // Lift, but Lift necessarily omitted it; restore it at the final lowering
161
    // boundary instead of assuming the serialized root can round-trip it.
162
10.7k
    if constexpr (Traits::kProfile != TargetProfile::kCompatibility) {
163
10.7k
      NormalizeScenarioForTarget(runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
164
10.7k
    }
165
10.7k
    return true;
166
10.8k
  }
167
};
168
169
/// Load one generated profile message and lower it into runtime state.
170
/// @tparam Traits Generated adapter defining the concrete message type.
171
/// @param data Serialized generated-profile bytes.
172
/// @param size Number of bytes available at `data`.
173
/// @param runtime Destination for the owned runtime Scenario.
174
/// @return Whether parsing and lowering succeeded.
175
template <typename Traits>
176
245k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
245k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
245k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastTelnetTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
4.47k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
4.47k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
4.47k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastFtpTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
6.18k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
6.18k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
6.18k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastSmtpTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
4.98k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
4.98k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
4.98k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::HttpsH2Traits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
12.3k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
12.3k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
12.3k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastTftpTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
2.28k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
2.28k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
2.28k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastWebSocketTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
9.25k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
9.25k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
9.25k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastDictTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
3.26k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
3.26k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
3.26k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::DeepHttpTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
12.8k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
12.8k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
12.8k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastIpfsTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
9.35k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
9.35k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
9.35k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastHttpsTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
27.7k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
27.7k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
27.7k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastImapTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
5.28k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
5.28k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
5.28k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastGopherTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
7.65k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
7.65k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
7.65k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastFileTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
3.61k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
3.61k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
3.61k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::TimingTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
10.2k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
10.2k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
10.2k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastPop3Traits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
3.88k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
3.88k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
3.88k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::MultiTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
12.3k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
12.3k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
12.3k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastHttp3Traits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
6.98k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
6.98k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
6.98k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::CompatibilityTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
12.3k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
12.3k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
12.3k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::ResolverTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
8.14k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
8.14k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
8.14k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::ProxyTransportTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
7.99k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
7.99k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
7.99k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastHttp2Traits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
15.0k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
15.0k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
15.0k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastHttpTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
12.2k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
12.2k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
12.2k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::ApiTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
11.9k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
11.9k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
11.9k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastLdapTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
5.82k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
5.82k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
5.82k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastRtspTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
6.38k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
6.38k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
6.38k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastMqttTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
4.11k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
4.11k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
4.11k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::FastSecureWebSocketTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
7.47k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
7.47k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
7.47k
}
bool proto_fuzzer::LoadProfileInput<proto_fuzzer::generated::H2ProxyTraits>(unsigned char const*, unsigned long, curl::fuzzer::proto::Scenario*)
Line
Count
Source
176
10.8k
bool LoadProfileInput(const std::uint8_t* data, std::size_t size, curl::fuzzer::proto::Scenario* runtime) {
177
10.8k
  return ProfileFuzzerHooks<Traits>::LoadAndLower(data, size, runtime);
178
10.8k
}
179
180
/// Exercise the typed mutation ABI once for the profiling timing target.
181
/// @tparam Traits Generated adapter defining the concrete message type.
182
template <typename Traits>
183
10.2k
void ProbeTimingMutationHelpers() {
184
10.2k
  static const bool mutation_helpers_probed = [] {
185
1
    constexpr std::size_t kBufferSize = 1024;
186
1
    constexpr unsigned int kMutationSeed = 0x4355524cU;
187
188
1
    curl::fuzzer::proto::Scenario runtime;
189
1
    NormalizeScenarioForTarget(&runtime, Traits::kProfile, &Traits::PruneConditionalEligibility);
190
191
1
    typename Traits::Message message;
192
1
    Traits::Lift(&runtime, &message);
193
1
    std::array<std::uint8_t, kBufferSize> first = {};
194
1
    const std::size_t original_size = message.ByteSizeLong();
195
1
    if (original_size > first.size()) {
196
0
      return true;
197
0
    }
198
1
    (void)message.SerializeWithCachedSizesToArray(first.data());
199
200
1
    using Hooks = ProfileFuzzerHooks<Traits>;
201
1
    std::array<std::uint8_t, kBufferSize> second = first;
202
1
    std::array<std::uint8_t, kBufferSize> child = {};
203
1
    const std::size_t mutated_size = Hooks::CustomMutator(first.data(), original_size, first.size(), kMutationSeed);
204
1
    const std::size_t crossed_size = Hooks::CustomCrossOver(first.data(), mutated_size, second.data(), original_size,
205
1
                                                            child.data(), child.size(), kMutationSeed);
206
1
    const volatile std::size_t result_sizes[] = {mutated_size, crossed_size};
207
1
    (void)result_sizes;
208
1
    return true;
209
1
  }();
210
10.2k
  (void)mutation_helpers_probed;
211
10.2k
}
212
213
/// Bind one generated adapter to the ordinary entrypoint helper interface.
214
/// @tparam Traits Generated adapter defining the concrete message type.
215
/// @return Immutable runtime descriptor binding all callbacks to `Traits`.
216
template <typename Traits>
217
0
constexpr ProfileFuzzerTraits BindProfileFuzzer() {
218
0
  using Hooks = ProfileFuzzerHooks<Traits>;
219
0
  if constexpr (Traits::kProfile == TargetProfile::kTiming) {
220
0
    return {Traits::kProfile, &Hooks::CustomMutator, &Hooks::CustomCrossOver, &LoadProfileInput<Traits>,
221
0
            &ProbeTimingMutationHelpers<Traits>};
222
0
  }
223
0
  return {Traits::kProfile, &Hooks::CustomMutator, &Hooks::CustomCrossOver, &LoadProfileInput<Traits>, nullptr};
224
0
}
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastTelnetTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastFtpTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastSmtpTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::HttpsH2Traits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastTftpTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastWebSocketTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastDictTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::DeepHttpTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastIpfsTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastHttpsTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastImapTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastGopherTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastFileTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::TimingTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastPop3Traits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::MultiTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastHttp3Traits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::CompatibilityTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::ResolverTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::ProxyTransportTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastHttp2Traits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastHttpTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::ApiTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastLdapTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastRtspTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastMqttTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::FastSecureWebSocketTraits>()
Unexecuted instantiation: proto_fuzzer::ProfileFuzzerTraits proto_fuzzer::BindProfileFuzzer<proto_fuzzer::generated::H2ProxyTraits>()
225
226
}  // namespace proto_fuzzer
227
228
#endif  // PROTO_FUZZER_PROFILE_FUZZER_H_