Coverage Report

Created: 2024-09-19 09:45

/proc/self/cwd/source/common/protobuf/utility.h
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
3
#include <numeric>
4
5
#include "envoy/api/api.h"
6
#include "envoy/common/exception.h"
7
#include "envoy/protobuf/message_validator.h"
8
#include "envoy/runtime/runtime.h"
9
#include "envoy/type/v3/percent.pb.h"
10
11
#include "source/common/common/hash.h"
12
#include "source/common/common/stl_helpers.h"
13
#include "source/common/common/utility.h"
14
#include "source/common/protobuf/protobuf.h"
15
#include "source/common/singleton/const_singleton.h"
16
17
#include "absl/status/status.h"
18
#include "absl/status/statusor.h"
19
#include "absl/strings/str_join.h"
20
21
// Obtain the value of a wrapped field (e.g. google.protobuf.UInt32Value) if set. Otherwise, return
22
// the default value.
23
#define PROTOBUF_GET_WRAPPED_OR_DEFAULT(message, field_name, default_value)                        \
24
525k
  ((message).has_##field_name() ? (message).field_name().value() : (default_value))
25
26
// Obtain the value of a wrapped field (e.g. google.protobuf.UInt32Value) if set. Otherwise, throw
27
// a EnvoyException.
28
29
#define PROTOBUF_GET_WRAPPED_REQUIRED(message, field_name)                                         \
30
49.4k
  ([](const auto& msg) {                                                                           \
31
49.4k
    if (!msg.has_##field_name()) {                                                                 \
32
113
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
113
    }                                                                                              \
34
49.4k
    return msg.field_name().value();                                                               \
35
49.4k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::WeightedClusterEntry::WeightedClusterEntry(Envoy::Router::RouteEntryImplBase const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Envoy::Server::Configuration::ServerFactoryContext&, Envoy::ProtobufMessage::ValidationVisitor&, envoy::config::route::v3::WeightedCluster_ClusterWeight const&)::$_0::operator()<envoy::config::route::v3::WeightedCluster_ClusterWeight>(envoy::config::route::v3::WeightedCluster_ClusterWeight const&) const
Line
Count
Source
30
37.1k
  ([](const auto& msg) {                                                                           \
31
37.1k
    if (!msg.has_##field_name()) {                                                                 \
32
113
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
113
    }                                                                                              \
34
37.1k
    return msg.field_name().value();                                                               \
35
37.1k
  }((message)))
auto Envoy::Router::CorsPolicyImplBase<envoy::config::route::v3::CorsPolicy>::CorsPolicyImplBase(envoy::config::route::v3::CorsPolicy const&, Envoy::Server::Configuration::CommonFactoryContext&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::route::v3::CorsPolicy>(envoy::config::route::v3::CorsPolicy const&) const
Line
Count
Source
30
1.62k
  ([](const auto& msg) {                                                                           \
31
1.62k
    if (!msg.has_##field_name()) {                                                                 \
32
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
0
    }                                                                                              \
34
1.62k
    return msg.field_name().value();                                                               \
35
1.62k
  }((message)))
auto Envoy::Router::CorsPolicyImplBase<envoy::config::route::v3::CorsPolicy>::CorsPolicyImplBase(envoy::config::route::v3::CorsPolicy const&, Envoy::Server::Configuration::CommonFactoryContext&)::{lambda(auto:1 const&)#2}::operator()<envoy::config::route::v3::CorsPolicy>(envoy::config::route::v3::CorsPolicy const&) const
Line
Count
Source
30
2.82k
  ([](const auto& msg) {                                                                           \
31
2.82k
    if (!msg.has_##field_name()) {                                                                 \
32
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
0
    }                                                                                              \
34
2.82k
    return msg.field_name().value();                                                               \
35
2.82k
  }((message)))
auto Envoy::Router::CorsPolicyImplBase<envoy::config::route::v3::CorsPolicy>::CorsPolicyImplBase(envoy::config::route::v3::CorsPolicy const&, Envoy::Server::Configuration::CommonFactoryContext&)::{lambda(auto:1 const&)#3}::operator()<envoy::config::route::v3::CorsPolicy>(envoy::config::route::v3::CorsPolicy const&) const
Line
Count
Source
30
1.09k
  ([](const auto& msg) {                                                                           \
31
1.09k
    if (!msg.has_##field_name()) {                                                                 \
32
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
0
    }                                                                                              \
34
1.09k
    return msg.field_name().value();                                                               \
35
1.09k
  }((message)))
health_checker_base_impl.cc:auto Envoy::Upstream::HealthCheckerImplBase::HealthCheckerImplBase(Envoy::Upstream::Cluster const&, envoy::config::core::v3::HealthCheck const&, Envoy::Event::Dispatcher&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, std::__1::unique_ptr<Envoy::Upstream::HealthCheckEventLogger, std::__1::default_delete<Envoy::Upstream::HealthCheckEventLogger> >&&)::$_1::operator()<envoy::config::core::v3::HealthCheck>(envoy::config::core::v3::HealthCheck const&) const
Line
Count
Source
30
3.37k
  ([](const auto& msg) {                                                                           \
31
3.37k
    if (!msg.has_##field_name()) {                                                                 \
32
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
0
    }                                                                                              \
34
3.37k
    return msg.field_name().value();                                                               \
35
3.37k
  }((message)))
health_checker_base_impl.cc:auto Envoy::Upstream::HealthCheckerImplBase::HealthCheckerImplBase(Envoy::Upstream::Cluster const&, envoy::config::core::v3::HealthCheck const&, Envoy::Event::Dispatcher&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, std::__1::unique_ptr<Envoy::Upstream::HealthCheckEventLogger, std::__1::default_delete<Envoy::Upstream::HealthCheckEventLogger> >&&)::$_2::operator()<envoy::config::core::v3::HealthCheck>(envoy::config::core::v3::HealthCheck const&) const
Line
Count
Source
30
3.37k
  ([](const auto& msg) {                                                                           \
31
3.37k
    if (!msg.has_##field_name()) {                                                                 \
32
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
33
0
    }                                                                                              \
34
3.37k
    return msg.field_name().value();                                                               \
35
3.37k
  }((message)))
Unexecuted instantiation: auto Envoy::Router::CorsPolicyImplBase<envoy::extensions::filters::http::cors::v3::CorsPolicy>::CorsPolicyImplBase(envoy::extensions::filters::http::cors::v3::CorsPolicy const&, Envoy::Server::Configuration::CommonFactoryContext&)::{lambda(auto:1 const&)#1}::operator()<envoy::extensions::filters::http::cors::v3::CorsPolicy>(envoy::extensions::filters::http::cors::v3::CorsPolicy const&) const
Unexecuted instantiation: auto Envoy::Router::CorsPolicyImplBase<envoy::extensions::filters::http::cors::v3::CorsPolicy>::CorsPolicyImplBase(envoy::extensions::filters::http::cors::v3::CorsPolicy const&, Envoy::Server::Configuration::CommonFactoryContext&)::{lambda(auto:1 const&)#2}::operator()<envoy::extensions::filters::http::cors::v3::CorsPolicy>(envoy::extensions::filters::http::cors::v3::CorsPolicy const&) const
Unexecuted instantiation: auto Envoy::Router::CorsPolicyImplBase<envoy::extensions::filters::http::cors::v3::CorsPolicy>::CorsPolicyImplBase(envoy::extensions::filters::http::cors::v3::CorsPolicy const&, Envoy::Server::Configuration::CommonFactoryContext&)::{lambda(auto:1 const&)#3}::operator()<envoy::extensions::filters::http::cors::v3::CorsPolicy>(envoy::extensions::filters::http::cors::v3::CorsPolicy const&) const
Unexecuted instantiation: oauth_client.cc:auto Envoy::Extensions::HttpFilters::Oauth2::OAuth2ClientImpl::onSuccess(Envoy::Http::AsyncClient::Request const&, std::__1::unique_ptr<Envoy::Http::Message<Envoy::Http::ResponseHeaderMap, Envoy::Http::ResponseTrailerMap>, std::__1::default_delete<Envoy::Http::Message<Envoy::Http::ResponseHeaderMap, Envoy::Http::ResponseTrailerMap> > >&&)::$_0::operator()<envoy::extensions::http_filters::oauth2::OAuthResponse>(envoy::extensions::http_filters::oauth2::OAuthResponse const&) const
Unexecuted instantiation: connection_limit.cc:auto Envoy::Extensions::NetworkFilters::ConnectionLimitFilter::Config::Config(envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit const&, Envoy::Stats::Scope&, Envoy::Runtime::Loader&)::$_0::operator()<envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit>(envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit const&) const
Unexecuted instantiation: route_matcher.cc:auto Envoy::Extensions::NetworkFilters::DubboProxy::Router::RouteEntryImplBase::WeightedClusterEntry::WeightedClusterEntry(Envoy::Extensions::NetworkFilters::DubboProxy::Router::RouteEntryImplBase const&, envoy::config::route::v3::WeightedCluster_ClusterWeight const&)::$_0::operator()<envoy::config::route::v3::WeightedCluster_ClusterWeight>(envoy::config::route::v3::WeightedCluster_ClusterWeight const&) const
Unexecuted instantiation: router_impl.cc:auto Envoy::Extensions::NetworkFilters::ThriftProxy::Router::RouteEntryImplBase::WeightedClusterEntry::WeightedClusterEntry(Envoy::Extensions::NetworkFilters::ThriftProxy::Router::RouteEntryImplBase const&, envoy::extensions::filters::network::thrift_proxy::v3::WeightedCluster_ClusterWeight const&)::$_0::operator()<envoy::extensions::filters::network::thrift_proxy::v3::WeightedCluster_ClusterWeight>(envoy::extensions::filters::network::thrift_proxy::v3::WeightedCluster_ClusterWeight const&) const
Unexecuted instantiation: oauth_client.cc:auto Envoy::Extensions::Http::InjectedCredentials::OAuth2::OAuth2ClientImpl::onSuccess(Envoy::Http::AsyncClient::Request const&, std::__1::unique_ptr<Envoy::Http::Message<Envoy::Http::ResponseHeaderMap, Envoy::Http::ResponseTrailerMap>, std::__1::default_delete<Envoy::Http::Message<Envoy::Http::ResponseHeaderMap, Envoy::Http::ResponseTrailerMap> > >&&)::$_0::operator()<envoy::extensions::http::injected_credentials::oauth2::OAuthResponse>(envoy::extensions::http::injected_credentials::oauth2::OAuthResponse const&) const
Unexecuted instantiation: oauth_client.cc:auto Envoy::Extensions::Http::InjectedCredentials::OAuth2::OAuth2ClientImpl::onSuccess(Envoy::Http::AsyncClient::Request const&, std::__1::unique_ptr<Envoy::Http::Message<Envoy::Http::ResponseHeaderMap, Envoy::Http::ResponseTrailerMap>, std::__1::default_delete<Envoy::Http::Message<Envoy::Http::ResponseHeaderMap, Envoy::Http::ResponseTrailerMap> > >&&)::$_1::operator()<envoy::extensions::http::injected_credentials::oauth2::OAuthResponse>(envoy::extensions::http::injected_credentials::oauth2::OAuthResponse const&) const
36
// Obtain the milliseconds value of a google.protobuf.Duration field if set. Otherwise, return the
37
// default value.
38
#define PROTOBUF_GET_MS_OR_DEFAULT(message, field_name, default_value)                             \
39
186k
  ((message).has_##field_name() ? DurationUtil::durationToMilliseconds((message).field_name())     \
40
186k
                                : (default_value))
41
42
// Obtain the string value if the field is set. Otherwise, return the default value.
43
#define PROTOBUF_GET_STRING_OR_DEFAULT(message, field_name, default_value)                         \
44
  (!(message).field_name().empty() ? (message).field_name() : (default_value))
45
46
// Obtain the milliseconds value of a google.protobuf.Duration field if set. Otherwise, return
47
// absl::nullopt.
48
#define PROTOBUF_GET_OPTIONAL_MS(message, field_name)                                              \
49
8.35k
  ((message).has_##field_name()                                                                    \
50
8.35k
       ? absl::optional<std::chrono::milliseconds>(                                                \
51
3.69k
             DurationUtil::durationToMilliseconds((message).field_name()))                         \
52
8.35k
       : absl::nullopt)
53
54
// Obtain the milliseconds value of a google.protobuf.Duration field if set. Otherwise, throw an
55
// EnvoyException.
56
#define PROTOBUF_GET_MS_REQUIRED(message, field_name)                                              \
57
48.1k
  ([](const auto& msg) {                                                                           \
58
48.1k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
48.1k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
48.1k
  }((message)))
config_impl.cc:auto Envoy::Router::RetryPolicyImpl::RetryPolicyImpl(envoy::config::route::v3::RetryPolicy const&, Envoy::ProtobufMessage::ValidationVisitor&, Envoy::Upstream::RetryExtensionFactoryContext&, Envoy::Server::Configuration::CommonFactoryContext&, absl::lts_20230802::Status&)::$_0::operator()<envoy::config::route::v3::RetryPolicy_RetryBackOff>(envoy::config::route::v3::RetryPolicy_RetryBackOff const&) const
Line
Count
Source
57
6.46k
  ([](const auto& msg) {                                                                           \
58
6.46k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
6.46k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
6.46k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::buildOptionalTimeouts(envoy::config::route::v3::RouteAction const&) const::$_0::operator()<envoy::config::route::v3::RouteAction>(envoy::config::route::v3::RouteAction const&) const
Line
Count
Source
57
6.62k
  ([](const auto& msg) {                                                                           \
58
6.62k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
6.62k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
6.62k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::buildOptionalTimeouts(envoy::config::route::v3::RouteAction const&) const::$_1::operator()<envoy::config::route::v3::RouteAction>(envoy::config::route::v3::RouteAction const&) const
Line
Count
Source
57
8.23k
  ([](const auto& msg) {                                                                           \
58
8.23k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
8.23k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
8.23k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::buildOptionalTimeouts(envoy::config::route::v3::RouteAction const&) const::$_2::operator()<envoy::config::route::v3::RouteAction>(envoy::config::route::v3::RouteAction const&) const
Line
Count
Source
57
5.60k
  ([](const auto& msg) {                                                                           \
58
5.60k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
5.60k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
5.60k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::buildOptionalTimeouts(envoy::config::route::v3::RouteAction const&) const::$_3::operator()<envoy::config::route::v3::RouteAction_MaxStreamDuration>(envoy::config::route::v3::RouteAction_MaxStreamDuration const&) const
Line
Count
Source
57
5.49k
  ([](const auto& msg) {                                                                           \
58
5.49k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
5.49k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
5.49k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::buildOptionalTimeouts(envoy::config::route::v3::RouteAction const&) const::$_4::operator()<envoy::config::route::v3::RouteAction_MaxStreamDuration>(envoy::config::route::v3::RouteAction_MaxStreamDuration const&) const
Line
Count
Source
57
2.38k
  ([](const auto& msg) {                                                                           \
58
2.38k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
2.38k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
2.38k
  }((message)))
config_impl.cc:auto Envoy::Router::RouteEntryImplBase::buildOptionalTimeouts(envoy::config::route::v3::RouteAction const&) const::$_5::operator()<envoy::config::route::v3::RouteAction_MaxStreamDuration>(envoy::config::route::v3::RouteAction_MaxStreamDuration const&) const
Line
Count
Source
57
2.30k
  ([](const auto& msg) {                                                                           \
58
2.30k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
2.30k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
2.30k
  }((message)))
codec_impl.cc:auto Envoy::Http::Http2::ConnectionImpl::ConnectionImpl(Envoy::Network::Connection&, Envoy::Http::Http2::CodecStats&, Envoy::Random::RandomGenerator&, envoy::config::core::v3::Http2ProtocolOptions const&, unsigned int, unsigned int)::$_0::operator()<envoy::config::core::v3::KeepaliveSettings>(envoy::config::core::v3::KeepaliveSettings const&) const
Line
Count
Source
57
96
  ([](const auto& msg) {                                                                           \
58
96
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
96
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
96
  }((message)))
utility.cc:auto Envoy::Http::Utility::validateCoreRetryPolicy(envoy::config::core::v3::RetryPolicy const&)::$_0::operator()<envoy::config::core::v3::BackoffStrategy>(envoy::config::core::v3::BackoffStrategy const&) const
Line
Count
Source
57
118
  ([](const auto& msg) {                                                                           \
58
118
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
118
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
118
  }((message)))
utility.cc:auto Envoy::Http::Utility::convertCoreToRouteRetryPolicy(envoy::config::core::v3::RetryPolicy const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)::$_0::operator()<envoy::config::core::v3::BackoffStrategy>(envoy::config::core::v3::BackoffStrategy const&) const
Line
Count
Source
57
722
  ([](const auto& msg) {                                                                           \
58
722
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
722
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
722
  }((message)))
utility.cc:auto Envoy::Config::Utility::buildJitteredExponentialBackOffStrategy(std::__1::optional<envoy::config::core::v3::BackoffStrategy const>, Envoy::Random::RandomGenerator&, unsigned int, std::__1::optional<unsigned int const>)::$_0::operator()<envoy::config::core::v3::BackoffStrategy>(envoy::config::core::v3::BackoffStrategy const&) const
Line
Count
Source
57
16
  ([](const auto& msg) {                                                                           \
58
16
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
16
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
16
  }((message)))
health_checker_base_impl.cc:auto Envoy::Upstream::HealthCheckerImplBase::HealthCheckerImplBase(Envoy::Upstream::Cluster const&, envoy::config::core::v3::HealthCheck const&, Envoy::Event::Dispatcher&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, std::__1::unique_ptr<Envoy::Upstream::HealthCheckEventLogger, std::__1::default_delete<Envoy::Upstream::HealthCheckEventLogger> >&&)::$_0::operator()<envoy::config::core::v3::HealthCheck>(envoy::config::core::v3::HealthCheck const&) const
Line
Count
Source
57
3.37k
  ([](const auto& msg) {                                                                           \
58
3.37k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
3.37k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
3.37k
  }((message)))
health_checker_base_impl.cc:auto Envoy::Upstream::HealthCheckerImplBase::HealthCheckerImplBase(Envoy::Upstream::Cluster const&, envoy::config::core::v3::HealthCheck const&, Envoy::Event::Dispatcher&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, std::__1::unique_ptr<Envoy::Upstream::HealthCheckEventLogger, std::__1::default_delete<Envoy::Upstream::HealthCheckEventLogger> >&&)::$_3::operator()<envoy::config::core::v3::HealthCheck>(envoy::config::core::v3::HealthCheck const&) const
Line
Count
Source
57
3.37k
  ([](const auto& msg) {                                                                           \
58
3.37k
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
3.37k
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
3.37k
  }((message)))
Unexecuted instantiation: auto Envoy::Config::Utility::prepareDnsRefreshStrategy<envoy::config::cluster::v3::Cluster>(envoy::config::cluster::v3::Cluster const&, unsigned long, Envoy::Random::RandomGenerator&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::cluster::v3::Cluster_RefreshRate>(envoy::config::cluster::v3::Cluster_RefreshRate const&) const
Unexecuted instantiation: filter.cc:auto Envoy::Extensions::HttpFilters::RateLimitQuota::RateLimitQuotaFilter::sendImmediateReport(unsigned long, Envoy::Extensions::HttpFilters::RateLimitQuota::RateLimitOnMatchAction const&)::$_0::operator()<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaBucketSettings>(envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaBucketSettings const&) const
Unexecuted instantiation: oauth_client.cc:auto Envoy::Extensions::HttpFilters::Oauth2::OAuth2ClientImpl::dispatchRequest(std::__1::unique_ptr<Envoy::Http::Message<Envoy::Http::RequestHeaderMap, Envoy::Http::RequestTrailerMap>, std::__1::default_delete<Envoy::Http::Message<Envoy::Http::RequestHeaderMap, Envoy::Http::RequestTrailerMap> > >&&)::$_0::operator()<envoy::config::core::v3::HttpUri>(envoy::config::core::v3::HttpUri const&) const
Unexecuted instantiation: local_ratelimit.cc:auto Envoy::Extensions::ListenerFilters::LocalRateLimit::FilterConfig::FilterConfig(envoy::extensions::filters::listener::local_ratelimit::v3::LocalRateLimit const&, Envoy::Event::Dispatcher&, Envoy::Stats::Scope&, Envoy::Runtime::Loader&)::$_0::operator()<envoy::type::v3::TokenBucket>(envoy::type::v3::TokenBucket const&) const
local_ratelimit.cc:auto Envoy::Extensions::NetworkFilters::LocalRateLimitFilter::Config::Config(envoy::extensions::filters::network::local_ratelimit::v3::LocalRateLimit const&, Envoy::Event::Dispatcher&, Envoy::Stats::Scope&, Envoy::Runtime::Loader&, Envoy::Singleton::Manager&)::$_0::operator()() const::{lambda(auto:1 const&)#1}::operator()<envoy::type::v3::TokenBucket>(envoy::type::v3::TokenBucket const&) const
Line
Count
Source
57
992
  ([](const auto& msg) {                                                                           \
58
992
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
992
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
992
  }((message)))
fault_config.cc:auto Envoy::Extensions::Filters::Common::Fault::FaultDelayConfig::FaultDelayConfig(envoy::extensions::filters::common::fault::v3::FaultDelay const&)::$_0::operator()<envoy::extensions::filters::common::fault::v3::FaultDelay>(envoy::extensions::filters::common::fault::v3::FaultDelay const&) const
Line
Count
Source
57
35
  ([](const auto& msg) {                                                                           \
58
35
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
35
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
35
  }((message)))
Unexecuted instantiation: client_impl.cc:auto Envoy::Extensions::NetworkFilters::Common::Redis::Client::ConfigImpl::ConfigImpl(envoy::extensions::filters::network::redis_proxy::v3::RedisProxy_ConnPoolSettings const&)::$_0::operator()<envoy::extensions::filters::network::redis_proxy::v3::RedisProxy_ConnPoolSettings>(envoy::extensions::filters::network::redis_proxy::v3::RedisProxy_ConnPoolSettings const&) const
filter.cc:auto Envoy::Extensions::NetworkFilters::ZooKeeperProxy::ZooKeeperFilterConfig::parseLatencyThresholdOverrides(google::protobuf::RepeatedPtrField<envoy::extensions::filters::network::zookeeper_proxy::v3::LatencyThresholdOverride> const&)::$_0::operator()<envoy::extensions::filters::network::zookeeper_proxy::v3::LatencyThresholdOverride>(envoy::extensions::filters::network::zookeeper_proxy::v3::LatencyThresholdOverride const&) const
Line
Count
Source
57
342
  ([](const auto& msg) {                                                                           \
58
342
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
342
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
342
  }((message)))
Unexecuted instantiation: auto Envoy::Config::Utility::prepareDnsRefreshStrategy<envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig>(envoy::extensions::common::dynamic_forward_proxy::v3::DnsCacheConfig const&, unsigned long, Envoy::Random::RandomGenerator&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::cluster::v3::Cluster_RefreshRate>(envoy::config::cluster::v3::Cluster_RefreshRate const&) const
Unexecuted instantiation: oauth_client.cc:auto Envoy::Extensions::Http::InjectedCredentials::OAuth2::OAuth2ClientImpl::dispatchRequest(std::__1::unique_ptr<Envoy::Http::Message<Envoy::Http::RequestHeaderMap, Envoy::Http::RequestTrailerMap>, std::__1::default_delete<Envoy::Http::Message<Envoy::Http::RequestHeaderMap, Envoy::Http::RequestTrailerMap> > >&&)::$_0::operator()<envoy::config::core::v3::HttpUri>(envoy::config::core::v3::HttpUri const&) const
local_ratelimit_fuzz_test.cc:auto Envoy::Extensions::NetworkFilters::LocalRateLimitFilter::TestOneProtoInput(envoy::extensions::filters::network::local_ratelimit::LocalRateLimitTestCase const&)::$_0::operator()<envoy::type::v3::TokenBucket>(envoy::type::v3::TokenBucket const&) const
Line
Count
Source
57
991
  ([](const auto& msg) {                                                                           \
58
991
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
991
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
991
  }((message)))
local_ratelimit_fuzz_test.cc:auto Envoy::Extensions::NetworkFilters::LocalRateLimitFilter::TestOneProtoInput(envoy::extensions::filters::network::local_ratelimit::LocalRateLimitTestCase const&)::$_1::operator()<envoy::type::v3::TokenBucket>(envoy::type::v3::TokenBucket const&) const
Line
Count
Source
57
990
  ([](const auto& msg) {                                                                           \
58
990
    if (!msg.has_##field_name()) {                                                                 \
59
0
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
60
0
    }                                                                                              \
61
990
    return DurationUtil::durationToMilliseconds(msg.field_name());                                 \
62
990
  }((message)))
Unexecuted instantiation: uber_per_readfilter.cc:auto Envoy::Extensions::NetworkFilters::UberFilterFuzzer::checkInvalidInputForFuzzer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, google::protobuf::Message*)::$_0::operator()<envoy::config::core::v3::KeepaliveSettings>(envoy::config::core::v3::KeepaliveSettings const&) const
Unexecuted instantiation: uber_per_readfilter.cc:auto Envoy::Extensions::NetworkFilters::UberFilterFuzzer::checkInvalidInputForFuzzer(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, google::protobuf::Message*)::$_1::operator()<envoy::config::core::v3::KeepaliveSettings>(envoy::config::core::v3::KeepaliveSettings const&) const
63
64
// Obtain the seconds value of a google.protobuf.Duration field if set. Otherwise, return the
65
// default value.
66
#define PROTOBUF_GET_SECONDS_OR_DEFAULT(message, field_name, default_value)                        \
67
0
  ((message).has_##field_name() ? DurationUtil::durationToSeconds((message).field_name())          \
68
0
                                : (default_value))
69
70
// Obtain the seconds value of a google.protobuf.Duration field if set. Otherwise, throw an
71
// EnvoyException.
72
#define PROTOBUF_GET_SECONDS_REQUIRED(message, field_name)                                         \
73
  ([](const auto& msg) {                                                                           \
74
    if (!msg.has_##field_name()) {                                                                 \
75
      ::Envoy::ProtoExceptionUtil::throwMissingFieldException(#field_name, msg);                   \
76
    }                                                                                              \
77
    return DurationUtil::durationToSeconds(msg.field_name());                                      \
78
  }((message)))
79
80
namespace Envoy {
81
namespace ProtobufPercentHelper {
82
83
// The following are helpers used in the PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT macro.
84
// This avoids a giant macro mess when trying to do asserts, casts, etc.
85
uint64_t checkAndReturnDefault(uint64_t default_value, uint64_t max_value);
86
uint64_t convertPercent(double percent, uint64_t max_value);
87
88
/**
89
 * Given a fractional percent chance of a given event occurring, evaluate to a yes/no decision
90
 * based on a provided random value.
91
 * @param percent the chance of a given event happening.
92
 * @param random_value supplies a numerical value to use to evaluate the event.
93
 * @return bool decision about whether the event should occur.
94
 */
95
bool evaluateFractionalPercent(envoy::type::v3::FractionalPercent percent, uint64_t random_value);
96
97
/**
98
 * Convert a fractional percent denominator enum into an integer.
99
 * @param denominator supplies denominator to convert.
100
 * @return the converted denominator.
101
 */
102
uint64_t fractionalPercentDenominatorToInt(
103
    const envoy::type::v3::FractionalPercent::DenominatorType& denominator);
104
105
} // namespace ProtobufPercentHelper
106
} // namespace Envoy
107
108
// Convert an envoy::type::v3::Percent to a double or a default.
109
// @param message supplies the proto message containing the field.
110
// @param field_name supplies the field name in the message.
111
// @param default_value supplies the default if the field is not present.
112
#define PROTOBUF_PERCENT_TO_DOUBLE_OR_DEFAULT(message, field_name, default_value)                  \
113
7.24k
  ([](const auto& msg) -> double {                                                                 \
114
7.24k
    if (std::isnan(msg.field_name().value())) {                                                    \
115
5
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
116
5
          fmt::format("Value not in the range of 0..100 range."));                                 \
117
5
    }                                                                                              \
118
7.24k
    return (msg).has_##field_name() ? (msg).field_name().value() : default_value;                  \
119
7.24k
  }((message)))
load_balancer_impl.cc:double Envoy::Upstream::EdfLoadBalancerBase::EdfLoadBalancerBase(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::PrioritySet const*, Envoy::Upstream::ClusterLbStats&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, unsigned int, std::__1::optional<envoy::extensions::load_balancing_policies::common::v3::LocalityLbConfig>, std::__1::optional<envoy::extensions::load_balancing_policies::common::v3::SlowStartConfig>, Envoy::TimeSource&)::$_0::operator()<envoy::extensions::load_balancing_policies::common::v3::SlowStartConfig>(envoy::extensions::load_balancing_policies::common::v3::SlowStartConfig const&) const
Line
Count
Source
113
555
  ([](const auto& msg) -> double {                                                                 \
114
555
    if (std::isnan(msg.field_name().value())) {                                                    \
115
4
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
116
4
          fmt::format("Value not in the range of 0..100 range."));                                 \
117
4
    }                                                                                              \
118
555
    return (msg).has_##field_name() ? (msg).field_name().value() : default_value;                  \
119
555
  }((message)))
configuration_impl.cc:double Envoy::Server::Configuration::WatchdogImpl::WatchdogImpl(envoy::config::bootstrap::v3::Watchdog const&, Envoy::Server::Instance&)::$_0::operator()<envoy::config::bootstrap::v3::Watchdog>(envoy::config::bootstrap::v3::Watchdog const&) const
Line
Count
Source
113
6.69k
  ([](const auto& msg) -> double {                                                                 \
114
6.69k
    if (std::isnan(msg.field_name().value())) {                                                    \
115
1
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
116
1
          fmt::format("Value not in the range of 0..100 range."));                                 \
117
1
    }                                                                                              \
118
6.69k
    return (msg).has_##field_name() ? (msg).field_name().value() : default_value;                  \
119
6.69k
  }((message)))
Unexecuted instantiation: gradient_controller.cc:double Envoy::Extensions::HttpFilters::AdaptiveConcurrency::Controller::GradientControllerConfig::GradientControllerConfig(envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig const&, Envoy::Runtime::Loader&)::$_0::operator()<envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig_MinimumRTTCalculationParams>(envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig_MinimumRTTCalculationParams const&) const
Unexecuted instantiation: gradient_controller.cc:double Envoy::Extensions::HttpFilters::AdaptiveConcurrency::Controller::GradientControllerConfig::GradientControllerConfig(envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig const&, Envoy::Runtime::Loader&)::$_1::operator()<envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig>(envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig const&) const
Unexecuted instantiation: gradient_controller.cc:double Envoy::Extensions::HttpFilters::AdaptiveConcurrency::Controller::GradientControllerConfig::GradientControllerConfig(envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig const&, Envoy::Runtime::Loader&)::$_2::operator()<envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig_MinimumRTTCalculationParams>(envoy::extensions::filters::http::adaptive_concurrency::v3::GradientControllerConfig_MinimumRTTCalculationParams const&) const
120
// Convert an envoy::type::v3::Percent to a rounded integer or a default.
121
// @param message supplies the proto message containing the field.
122
// @param field_name supplies the field name in the message.
123
// @param max_value supplies the maximum allowed integral value (e.g., 100, 10000, etc.).
124
// @param default_value supplies the default if the field is not present.
125
//
126
// TODO(anirudhmurali): Recommended to capture and validate NaN values in PGV
127
// Issue: https://github.com/bufbuild/protoc-gen-validate/issues/85
128
#define PROTOBUF_PERCENT_TO_ROUNDED_INTEGER_OR_DEFAULT(message, field_name, max_value,             \
129
                                                       default_value)                              \
130
9.84k
  ([](const auto& msg) {                                                                           \
131
9.84k
    if (std::isnan(msg.field_name().value())) {                                                    \
132
11
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
11
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
11
    }                                                                                              \
135
9.84k
    return (msg).has_##field_name()                                                                \
136
9.84k
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
9.84k
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
9.84k
  }((message)))
auto Envoy::Tracing::ConnectionManagerTracingConfigImpl::ConnectionManagerTracingConfigImpl(envoy::config::core::v3::TrafficDirection, envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager_Tracing const&)::{lambda(auto:1 const&)#1}::operator()<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager_Tracing>(envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager_Tracing const&) const
Line
Count
Source
130
1.01k
  ([](const auto& msg) {                                                                           \
131
1.01k
    if (std::isnan(msg.field_name().value())) {                                                    \
132
1
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
1
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
1
    }                                                                                              \
135
1.01k
    return (msg).has_##field_name()                                                                \
136
1.01k
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
1.01k
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
1.01k
  }((message)))
auto Envoy::Tracing::ConnectionManagerTracingConfigImpl::ConnectionManagerTracingConfigImpl(envoy::config::core::v3::TrafficDirection, envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager_Tracing const&)::{lambda(auto:1 const&)#2}::operator()<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager_Tracing>(envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager_Tracing const&) const
Line
Count
Source
130
1.01k
  ([](const auto& msg) {                                                                           \
131
1.01k
    if (std::isnan(msg.field_name().value())) {                                                    \
132
2
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
2
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
2
    }                                                                                              \
135
1.01k
    return (msg).has_##field_name()                                                                \
136
1.01k
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
1.01k
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
1.01k
  }((message)))
Unexecuted instantiation: config.cc:auto Envoy::Extensions::LoadBalancingPolices::RoundRobin::RoundRobinCreator::operator()(Envoy::Upstream::LoadBalancerParams, Envoy::OptRef<Envoy::Upstream::LoadBalancerConfig const>, Envoy::Upstream::ClusterInfo const&, Envoy::Upstream::PrioritySet const&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::TimeSource&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
auto Envoy::Upstream::RoundRobinLoadBalancer::RoundRobinLoadBalancer(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::PrioritySet const*, Envoy::Upstream::ClusterLbStats&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, envoy::config::cluster::v3::Cluster_CommonLbConfig const&, Envoy::OptRef<envoy::config::cluster::v3::Cluster_RoundRobinLbConfig const>, Envoy::TimeSource&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Line
Count
Source
130
5.91k
  ([](const auto& msg) {                                                                           \
131
5.91k
    if (std::isnan(msg.field_name().value())) {                                                    \
132
2
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
2
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
2
    }                                                                                              \
135
5.91k
    return (msg).has_##field_name()                                                                \
136
5.91k
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
5.91k
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
5.91k
  }((message)))
load_balancer_impl.cc:auto Envoy::Upstream::ZoneAwareLoadBalancerBase::ZoneAwareLoadBalancerBase(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::PrioritySet const*, Envoy::Upstream::ClusterLbStats&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, unsigned int, std::__1::optional<envoy::extensions::load_balancing_policies::common::v3::LocalityLbConfig>)::$_0::operator()<envoy::extensions::load_balancing_policies::common::v3::LocalityLbConfig_ZoneAwareLbConfig>(envoy::extensions::load_balancing_policies::common::v3::LocalityLbConfig_ZoneAwareLbConfig const&) const
Line
Count
Source
130
108
  ([](const auto& msg) {                                                                           \
131
108
    if (std::isnan(msg.field_name().value())) {                                                    \
132
3
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
3
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
3
    }                                                                                              \
135
108
    return (msg).has_##field_name()                                                                \
136
108
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
108
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
108
  }((message)))
Unexecuted instantiation: config.cc:auto Envoy::Extensions::LoadBalancingPolices::LeastRequest::LeastRequestCreator::operator()(Envoy::Upstream::LoadBalancerParams, Envoy::OptRef<Envoy::Upstream::LoadBalancerConfig const>, Envoy::Upstream::ClusterInfo const&, Envoy::Upstream::PrioritySet const&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::TimeSource&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
auto Envoy::Upstream::LeastRequestLoadBalancer::LeastRequestLoadBalancer(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::PrioritySet const*, Envoy::Upstream::ClusterLbStats&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, envoy::config::cluster::v3::Cluster_CommonLbConfig const&, Envoy::OptRef<envoy::config::cluster::v3::Cluster_LeastRequestLbConfig const>, Envoy::TimeSource&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Line
Count
Source
130
1.19k
  ([](const auto& msg) {                                                                           \
131
1.19k
    if (std::isnan(msg.field_name().value())) {                                                    \
132
1
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
1
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
1
    }                                                                                              \
135
1.19k
    return (msg).has_##field_name()                                                                \
136
1.19k
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
1.19k
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
1.19k
  }((message)))
Unexecuted instantiation: config.cc:auto Envoy::Extensions::LoadBalancingPolices::Maglev::Factory::create(Envoy::OptRef<Envoy::Upstream::LoadBalancerConfig const>, Envoy::Upstream::ClusterInfo const&, Envoy::Upstream::PrioritySet const&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::TimeSource&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Unexecuted instantiation: maglev_lb.cc:auto Envoy::Upstream::MaglevLoadBalancer::MaglevLoadBalancer(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::ClusterLbStats&, Envoy::Stats::Scope&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::OptRef<envoy::config::cluster::v3::Cluster_MaglevLbConfig const>, envoy::config::cluster::v3::Cluster_CommonLbConfig const&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Unexecuted instantiation: config.cc:auto Envoy::Extensions::LoadBalancingPolices::Random::RandomCreator::operator()(Envoy::Upstream::LoadBalancerParams, Envoy::OptRef<Envoy::Upstream::LoadBalancerConfig const>, Envoy::Upstream::ClusterInfo const&, Envoy::Upstream::PrioritySet const&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::TimeSource&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
auto Envoy::Upstream::RandomLoadBalancer::RandomLoadBalancer(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::PrioritySet const*, Envoy::Upstream::ClusterLbStats&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, envoy::config::cluster::v3::Cluster_CommonLbConfig const&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Line
Count
Source
130
605
  ([](const auto& msg) {                                                                           \
131
605
    if (std::isnan(msg.field_name().value())) {                                                    \
132
2
      ::Envoy::ExceptionUtil::throwEnvoyException(                                                 \
133
2
          fmt::format("Value not in the range of 0..100 range."));                                 \
134
2
    }                                                                                              \
135
605
    return (msg).has_##field_name()                                                                \
136
605
               ? ProtobufPercentHelper::convertPercent((msg).field_name().value(), max_value)      \
137
605
               : ProtobufPercentHelper::checkAndReturnDefault(default_value, max_value);           \
138
605
  }((message)))
Unexecuted instantiation: auto Envoy::Extensions::Clusters::Aggregate::AggregateClusterLoadBalancer::LoadBalancerImpl::LoadBalancerImpl(Envoy::Extensions::Clusters::Aggregate::PriorityContext const&, Envoy::Upstream::ClusterLbStats&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, envoy::config::cluster::v3::Cluster_CommonLbConfig const&)::{lambda(auto:1 const&)#1}::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Unexecuted instantiation: config.cc:auto Envoy::Extensions::LoadBalancingPolices::RingHash::Factory::create(Envoy::OptRef<Envoy::Upstream::LoadBalancerConfig const>, Envoy::Upstream::ClusterInfo const&, Envoy::Upstream::PrioritySet const&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::TimeSource&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
Unexecuted instantiation: ring_hash_lb.cc:auto Envoy::Upstream::RingHashLoadBalancer::RingHashLoadBalancer(Envoy::Upstream::PrioritySet const&, Envoy::Upstream::ClusterLbStats&, Envoy::Stats::Scope&, Envoy::Runtime::Loader&, Envoy::Random::RandomGenerator&, Envoy::OptRef<envoy::config::cluster::v3::Cluster_RingHashLbConfig const>, envoy::config::cluster::v3::Cluster_CommonLbConfig const&)::$_0::operator()<envoy::config::cluster::v3::Cluster_CommonLbConfig>(envoy::config::cluster::v3::Cluster_CommonLbConfig const&) const
139
140
namespace Envoy {
141
142
class TypeUtil {
143
public:
144
  static absl::string_view typeUrlToDescriptorFullName(absl::string_view type_url);
145
146
  static std::string descriptorFullNameToTypeUrl(absl::string_view type);
147
};
148
149
class RepeatedPtrUtil {
150
public:
151
  static std::string join(const Protobuf::RepeatedPtrField<std::string>& source,
152
0
                          const std::string& delimiter) {
153
0
    return absl::StrJoin(std::vector<std::string>(source.begin(), source.end()), delimiter);
154
0
  }
155
156
  template <class ProtoType>
157
  static std::string debugString(const Protobuf::RepeatedPtrField<ProtoType>& source) {
158
    return accumulateToString<ProtoType>(
159
        source, [](const Protobuf::Message& message) { return message.DebugString(); });
160
  }
161
162
  // Based on MessageUtil::hash() defined below.
163
  template <class ProtoType>
164
0
  static std::size_t hash(const Protobuf::RepeatedPtrField<ProtoType>& source) {
165
0
    std::string text;
166
0
#if defined(ENVOY_ENABLE_FULL_PROTOS)
167
0
    {
168
0
      Protobuf::TextFormat::Printer printer;
169
0
      printer.SetExpandAny(true);
170
0
      printer.SetUseFieldNumber(true);
171
0
      printer.SetSingleLineMode(true);
172
0
      printer.SetHideUnknownFields(true);
173
0
      for (const auto& message : source) {
174
0
        std::string text_message;
175
0
        printer.PrintToString(message, &text_message);
176
0
        absl::StrAppend(&text, text_message);
177
0
      }
178
0
    }
179
#else
180
    for (const auto& message : source) {
181
      absl::StrAppend(&text, message.SerializeAsString());
182
    }
183
#endif
184
0
    return HashUtil::xxHash64(text);
185
0
  }
186
187
  /**
188
   * Converts a proto repeated field into a container of const Protobuf::Message unique_ptr's.
189
   *
190
   * @param repeated_field the proto repeated field to convert.
191
   * @return ReturnType the container of const Message pointers.
192
   */
193
  template <typename ProtoType, typename ReturnType>
194
  static ReturnType
195
223
  convertToConstMessagePtrContainer(const Protobuf::RepeatedPtrField<ProtoType>& repeated_field) {
196
223
    ReturnType ret_container;
197
223
    std::transform(repeated_field.begin(), repeated_field.end(), std::back_inserter(ret_container),
198
3.44k
                   [](const ProtoType& proto_message) -> std::unique_ptr<const Protobuf::Message> {
199
3.44k
                     Protobuf::Message* clone = proto_message.New();
200
3.44k
                     clone->CheckTypeAndMergeFrom(proto_message);
201
3.44k
                     return std::unique_ptr<const Protobuf::Message>(clone);
202
3.44k
                   });
203
223
    return ret_container;
204
223
  }
205
};
206
207
using ProtoValidationException = EnvoyException;
208
209
/**
210
 * utility functions to call when throwing exceptions in header files
211
 */
212
class ProtoExceptionUtil {
213
public:
214
  static void throwMissingFieldException(const std::string& field_name,
215
                                         const Protobuf::Message& message);
216
  static void throwProtoValidationException(const std::string& validation_error,
217
                                            const Protobuf::Message& message);
218
};
219
220
class MessageUtil {
221
public:
222
  // std::hash
223
76.9k
  std::size_t operator()(const Protobuf::Message& message) const { return hash(message); }
224
225
  // std::equals_to
226
22.6k
  bool operator()(const Protobuf::Message& lhs, const Protobuf::Message& rhs) const {
227
22.6k
    return Protobuf::util::MessageDifferencer::Equals(lhs, rhs);
228
22.6k
  }
229
230
  class FileExtensionValues {
231
  public:
232
    const std::string ProtoBinary = ".pb";
233
    const std::string ProtoBinaryLengthDelimited = ".pb_length_delimited";
234
    const std::string ProtoText = ".pb_text";
235
    const std::string Json = ".json";
236
    const std::string Yaml = ".yaml";
237
    const std::string Yml = ".yml";
238
  };
239
240
  using FileExtensions = ConstSingleton<FileExtensionValues>;
241
242
  /**
243
   * A hash function uses Protobuf::TextFormat to force deterministic serialization recursively
244
   * including known types in google.protobuf.Any. See
245
   * https://github.com/protocolbuffers/protobuf/issues/5731 for the context.
246
   * Using this function is discouraged, see discussion in
247
   * https://github.com/envoyproxy/envoy/issues/8301.
248
   */
249
  static std::size_t hash(const Protobuf::Message& message);
250
251
#ifdef ENVOY_ENABLE_YAML
252
  static void loadFromJson(const std::string& json, Protobuf::Message& message,
253
                           ProtobufMessage::ValidationVisitor& validation_visitor);
254
  /**
255
   * Return ok only when strict conversion(don't ignore unknown field) succeeds.
256
   * Return error status for strict conversion and set has_unknown_field to true if relaxed
257
   * conversion(ignore unknown field) succeeds.
258
   * Return error status for relaxed conversion and set has_unknown_field to false if relaxed
259
   * conversion(ignore unknown field) fails.
260
   */
261
  static absl::Status loadFromJsonNoThrow(const std::string& json, Protobuf::Message& message,
262
                                          bool& has_unknown_fileld);
263
  static void loadFromJson(const std::string& json, ProtobufWkt::Struct& message);
264
  static void loadFromYaml(const std::string& yaml, Protobuf::Message& message,
265
                           ProtobufMessage::ValidationVisitor& validation_visitor);
266
#endif
267
268
  // This function attempts to load Envoy configuration from the specified file
269
  // based on the file type.
270
  // It handles .pb .pb_text .json .yaml and .yml files which are well
271
  // structured based on the file type.
272
  // It has somewhat inconsistent handling of invalid file contents,
273
  // occasionally failing over to try another type of parsing, or silently
274
  // failing instead of throwing an exception.
275
  static void loadFromFile(const std::string& path, Protobuf::Message& message,
276
                           ProtobufMessage::ValidationVisitor& validation_visitor, Api::Api& api);
277
278
  /**
279
   * Checks for use of deprecated fields in message and all sub-messages.
280
   * @param message message to validate.
281
   * @param validation_visitor the validation visitor to use.
282
   * @param recurse_into_any whether to recurse into Any messages during unexpected checking.
283
   * @throw EnvoyException if deprecated fields are used and listed
284
   *    in disallowed_features in runtime_features.h
285
   */
286
  static void checkForUnexpectedFields(const Protobuf::Message& message,
287
                                       ProtobufMessage::ValidationVisitor& validation_visitor,
288
                                       bool recurse_into_any = false);
289
290
  /**
291
   * Validates that duration fields in the config are valid.
292
   * @param message message to validate.
293
   * @param recurse_into_any whether to recurse into Any messages during unexpected checking.
294
   * @throw EnvoyException if a duration field is invalid.
295
   */
296
  static void validateDurationFields(const Protobuf::Message& message,
297
                                     bool recurse_into_any = false);
298
299
  /**
300
   * Perform a PGV check on the entire message tree, recursing into Any messages as needed.
301
   */
302
  static void recursivePgvCheck(const Protobuf::Message& message);
303
304
  /**
305
   * Validate protoc-gen-validate constraints on a given protobuf as well as performing
306
   * unexpected field validation.
307
   * Note the corresponding `.pb.validate.h` for the message has to be included in the source file
308
   * of caller.
309
   * @param message message to validate.
310
   * @param validation_visitor the validation visitor to use.
311
   * @param recurse_into_any whether to recurse into Any messages during unexpected checking.
312
   * @throw EnvoyException if the message does not satisfy its type constraints.
313
   */
314
  template <class MessageType>
315
  static void validate(const MessageType& message,
316
                       ProtobufMessage::ValidationVisitor& validation_visitor,
317
300k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
300k
    if (!validation_visitor.skipValidation()) {
324
300k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
300k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
300k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
300k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
300k
    std::string err;
344
300k
    if (!Validate(message, &err)) {
345
8.40k
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
8.40k
    }
347
300k
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_proc::unit_test_fuzz::ExtProcUnitTestCase>(envoy::extensions::filters::http::ext_proc::unit_test_fuzz::ExtProcUnitTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
5.07k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
5.07k
    if (!validation_visitor.skipValidation()) {
324
5.07k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
5.07k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
5.07k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
5.07k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
5.07k
    std::string err;
344
5.07k
    if (!Validate(message, &err)) {
345
610
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
610
    }
347
5.07k
  }
void Envoy::MessageUtil::validate<envoy::extensions::request_id::uuid::v3::UuidRequestIdConfig>(envoy::extensions::request_id::uuid::v3::UuidRequestIdConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6.30k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6.30k
    if (!validation_visitor.skipValidation()) {
324
6.30k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6.30k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6.30k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6.30k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6.30k
    std::string err;
344
6.30k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
6.30k
  }
void Envoy::MessageUtil::validate<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>(envoy::extensions::upstreams::http::v3::HttpProtocolOptions const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.54k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.54k
    if (!validation_visitor.skipValidation()) {
324
1.54k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.54k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.54k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.54k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.54k
    std::string err;
344
1.54k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1.54k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::upstreams::tcp::v3::TcpProtocolOptions>(envoy::extensions::upstreams::tcp::v3::TcpProtocolOptions const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_proc::v3::ExtProcPerRoute>(envoy::extensions::filters::http::ext_proc::v3::ExtProcPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_proc::v3::ExternalProcessor>(envoy::extensions::filters::http::ext_proc::v3::ExternalProcessor const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
806
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
806
    if (!validation_visitor.skipValidation()) {
324
806
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
806
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
806
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
806
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
806
    std::string err;
344
806
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
806
  }
void Envoy::MessageUtil::validate<envoy::config::cluster::v3::Cluster>(envoy::config::cluster::v3::Cluster const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
14
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
14
    if (!validation_visitor.skipValidation()) {
324
14
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
14
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
14
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
14
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
14
    std::string err;
344
14
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
14
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::service::health::v3::HealthCheckSpecifier>(envoy::service::health::v3::HealthCheckSpecifier const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::upstream_codec::v3::UpstreamCodec>(envoy::extensions::filters::http::upstream_codec::v3::UpstreamCodec const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
2.40k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
2.40k
    if (!validation_visitor.skipValidation()) {
324
2.40k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
2.40k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
2.40k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
2.40k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
2.40k
    std::string err;
344
2.40k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
2.40k
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager>(envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
9.09k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
9.09k
    if (!validation_visitor.skipValidation()) {
324
9.09k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
9.09k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
9.09k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
9.09k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
9.09k
    std::string err;
344
9.09k
    if (!Validate(message, &err)) {
345
281
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
281
    }
347
9.09k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager>(envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::quic::v3::QuicUpstreamTransport>(envoy::extensions::transport_sockets::quic::v3::QuicUpstreamTransport const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::tls::v3::Secret>(envoy::extensions::transport_sockets::tls::v3::Secret const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::type::matcher::v3::HttpRequestHeaderMatchInput>(envoy::type::matcher::v3::HttpRequestHeaderMatchInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
21.1k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
21.1k
    if (!validation_visitor.skipValidation()) {
324
21.1k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
21.1k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
21.1k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
21.1k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
21.1k
    std::string err;
344
21.1k
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
21.1k
  }
void Envoy::MessageUtil::validate<envoy::type::matcher::v3::HttpResponseHeaderMatchInput>(envoy::type::matcher::v3::HttpResponseHeaderMatchInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6.12k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6.12k
    if (!validation_visitor.skipValidation()) {
324
6.12k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6.12k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6.12k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6.12k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6.12k
    std::string err;
344
6.12k
    if (!Validate(message, &err)) {
345
2
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
2
    }
347
6.12k
  }
void Envoy::MessageUtil::validate<envoy::type::matcher::v3::HttpRequestTrailerMatchInput>(envoy::type::matcher::v3::HttpRequestTrailerMatchInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4.74k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4.74k
    if (!validation_visitor.skipValidation()) {
324
4.74k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4.74k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4.74k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4.74k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4.74k
    std::string err;
344
4.74k
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
4.74k
  }
void Envoy::MessageUtil::validate<envoy::type::matcher::v3::HttpResponseTrailerMatchInput>(envoy::type::matcher::v3::HttpResponseTrailerMatchInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
953
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
953
    if (!validation_visitor.skipValidation()) {
324
953
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
953
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
953
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
953
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
953
    std::string err;
344
953
    if (!Validate(message, &err)) {
345
2
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
2
    }
347
953
  }
void Envoy::MessageUtil::validate<envoy::type::matcher::v3::HttpRequestQueryParamMatchInput>(envoy::type::matcher::v3::HttpRequestQueryParamMatchInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::core::v3::TypedExtensionConfig>(envoy::config::core::v3::TypedExtensionConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::config::accesslog::v3::AccessLogFilter>(envoy::config::accesslog::v3::AccessLogFilter const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
16.1k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
16.1k
    if (!validation_visitor.skipValidation()) {
324
16.1k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
16.1k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
16.1k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
16.1k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
16.1k
    std::string err;
344
16.1k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
16.1k
  }
void Envoy::MessageUtil::validate<envoy::config::route::v3::Route>(envoy::config::route::v3::Route const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
64.9k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
64.9k
    if (!validation_visitor.skipValidation()) {
324
64.9k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
64.9k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
64.9k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
64.9k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
64.9k
    std::string err;
344
64.9k
    if (!Validate(message, &err)) {
345
365
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
365
    }
347
64.9k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::route::v3::RouteList>(envoy::config::route::v3::RouteList const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::common_inputs::network::v3::FilterStateInput>(envoy::extensions::matching::common_inputs::network::v3::FilterStateInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::path::match::uri_template::v3::UriTemplateMatchConfig>(envoy::extensions::path::match::uri_template::v3::UriTemplateMatchConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.61k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.61k
    if (!validation_visitor.skipValidation()) {
324
1.61k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.61k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.61k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.61k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.61k
    std::string err;
344
1.61k
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
1.61k
  }
void Envoy::MessageUtil::validate<envoy::extensions::path::rewrite::uri_template::v3::UriTemplateRewriteConfig>(envoy::extensions::path::rewrite::uri_template::v3::UriTemplateRewriteConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.08k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.08k
    if (!validation_visitor.skipValidation()) {
324
1.08k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.08k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.08k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.08k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.08k
    std::string err;
344
1.08k
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
1.08k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::header_validators::envoy_default::v3::HeaderValidatorConfig>(envoy::extensions::http::header_validators::envoy_default::v3::HeaderValidatorConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::http::original_ip_detection::xff::v3::XffConfig>(envoy::extensions::http::original_ip_detection::xff::v3::XffConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6.26k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6.26k
    if (!validation_visitor.skipValidation()) {
324
6.26k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6.26k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6.26k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6.26k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6.26k
    std::string err;
344
6.26k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
6.26k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::service::runtime::v3::Runtime>(envoy::service::runtime::v3::Runtime const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::core::v3::HealthCheck>(envoy::config::core::v3::HealthCheck const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::router::v3::Router>(envoy::extensions::filters::http::router::v3::Router const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4.10k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4.10k
    if (!validation_visitor.skipValidation()) {
324
4.10k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4.10k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4.10k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4.10k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4.10k
    std::string err;
344
4.10k
    if (!Validate(message, &err)) {
345
2
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
2
    }
347
4.10k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<test::integration::filters::AddBodyFilterConfig>(test::integration::filters::AddBodyFilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<test::integration::filters::CrashFilterConfig>(test::integration::filters::CrashFilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::config::route::v3::ScopedRouteConfiguration>(envoy::config::route::v3::ScopedRouteConfiguration const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
3.32k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
3.32k
    if (!validation_visitor.skipValidation()) {
324
3.32k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
3.32k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
3.32k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
3.32k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
3.32k
    std::string err;
344
3.32k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
3.32k
  }
void Envoy::MessageUtil::validate<envoy::config::route::v3::RouteConfiguration>(envoy::config::route::v3::RouteConfiguration const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
80
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
80
    if (!validation_visitor.skipValidation()) {
324
80
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
80
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
80
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
80
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
80
    std::string err;
344
80
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
80
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::route::v3::VirtualHost>(envoy::config::route::v3::VirtualHost const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::config::endpoint::v3::ClusterLoadAssignment>(envoy::config::endpoint::v3::ClusterLoadAssignment const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
14
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
14
    if (!validation_visitor.skipValidation()) {
324
14
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
14
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
14
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
14
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
14
    std::string err;
344
14
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
14
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::endpoint::v3::LbEndpoint>(envoy::config::endpoint::v3::LbEndpoint const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::tls::v3::DownstreamTlsContext>(envoy::extensions::transport_sockets::tls::v3::DownstreamTlsContext const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::tls::v3::UpstreamTlsContext>(envoy::extensions::transport_sockets::tls::v3::UpstreamTlsContext const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::config::bootstrap::v3::Bootstrap>(envoy::config::bootstrap::v3::Bootstrap const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
13.5k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
13.5k
    if (!validation_visitor.skipValidation()) {
324
13.5k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
13.5k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
13.5k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
13.5k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
13.5k
    std::string err;
344
13.5k
    if (!Validate(message, &err)) {
345
784
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
784
    }
347
13.5k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::common::key_value::v3::KeyValueStoreConfig>(envoy::config::common::key_value::v3::KeyValueStoreConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::config::listener::v3::Listener>(envoy::config::listener::v3::Listener const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
2.13k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
2.13k
    if (!validation_visitor.skipValidation()) {
324
2.13k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
2.13k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
2.13k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
2.13k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
2.13k
    std::string err;
344
2.13k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
2.13k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::quic::v3::QuicDownstreamTransport>(envoy::extensions::transport_sockets::quic::v3::QuicDownstreamTransport const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::overload::v3::ScaleTimersOverloadActionConfig>(envoy::config::overload::v3::ScaleTimersOverloadActionConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::file::v3::FileAccessLog>(envoy::extensions::access_loggers::file::v3::FileAccessLog const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4.10k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4.10k
    if (!validation_visitor.skipValidation()) {
324
4.10k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4.10k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4.10k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4.10k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4.10k
    std::string err;
344
4.10k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
4.10k
  }
void Envoy::MessageUtil::validate<test::common::http::ConnManagerImplTestCase>(test::common::http::ConnManagerImplTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.22k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.22k
    if (!validation_visitor.skipValidation()) {
324
1.22k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.22k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.22k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.22k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.22k
    std::string err;
344
1.22k
    if (!Validate(message, &err)) {
345
27
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
27
    }
347
1.22k
  }
void Envoy::MessageUtil::validate<test::extensions::filters::listener::FilterFuzzTestCase>(test::extensions::filters::listener::FilterFuzzTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.15k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.15k
    if (!validation_visitor.skipValidation()) {
324
1.15k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.15k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.15k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.15k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.15k
    std::string err;
344
1.15k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1.15k
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::jwt_authn::JwtAuthnFuzzInput>(envoy::extensions::filters::http::jwt_authn::JwtAuthnFuzzInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
9.13k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
9.13k
    if (!validation_visitor.skipValidation()) {
324
9.13k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
9.13k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
9.13k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
9.13k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
9.13k
    std::string err;
344
9.13k
    if (!Validate(message, &err)) {
345
367
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
367
    }
347
9.13k
  }
void Envoy::MessageUtil::validate<test::common::http::http2::HpackTestCase>(test::common::http::http2::HpackTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
2.82k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
2.82k
    if (!validation_visitor.skipValidation()) {
324
2.82k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
2.82k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
2.82k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
2.82k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
2.82k
    std::string err;
344
2.82k
    if (!Validate(message, &err)) {
345
63
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
63
    }
347
2.82k
  }
void Envoy::MessageUtil::validate<test::common::substitution::TestCase>(test::common::substitution::TestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.32k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.32k
    if (!validation_visitor.skipValidation()) {
324
1.32k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.32k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.32k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.32k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.32k
    std::string err;
344
1.32k
    if (!Validate(message, &err)) {
345
1.31k
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1.31k
    }
347
1.32k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::fluentd::v3::FluentdAccessLogConfig>(envoy::extensions::access_loggers::fluentd::v3::FluentdAccessLogConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::grpc::v3::HttpGrpcAccessLogConfig>(envoy::extensions::access_loggers::grpc::v3::HttpGrpcAccessLogConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::grpc::v3::TcpGrpcAccessLogConfig>(envoy::extensions::access_loggers::grpc::v3::TcpGrpcAccessLogConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig>(envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::stream::v3::StdoutAccessLog>(envoy::extensions::access_loggers::stream::v3::StdoutAccessLog const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::stream::v3::StderrAccessLog>(envoy::extensions::access_loggers::stream::v3::StderrAccessLog const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::access_loggers::wasm::v3::WasmAccessLog>(envoy::extensions::access_loggers::wasm::v3::WasmAccessLog const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::clusters::aggregate::v3::ClusterConfig>(envoy::extensions::clusters::aggregate::v3::ClusterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::clusters::redis::v3::RedisClusterConfig>(envoy::extensions::clusters::redis::v3::RedisClusterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::redis_proxy::v3::RedisProtocolOptions>(envoy::extensions::filters::network::redis_proxy::v3::RedisProtocolOptions const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::redis_proxy::v3::RedisProxy>(envoy::extensions::filters::network::redis_proxy::v3::RedisProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::compression::gzip::compressor::v3::Gzip>(envoy::extensions::compression::gzip::compressor::v3::Gzip const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::compression::gzip::decompressor::v3::Gzip>(envoy::extensions::compression::gzip::decompressor::v3::Gzip const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::compression::brotli::compressor::v3::Brotli>(envoy::extensions::compression::brotli::compressor::v3::Brotli const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::compression::brotli::decompressor::v3::Brotli>(envoy::extensions::compression::brotli::decompressor::v3::Brotli const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::compression::zstd::compressor::v3::Zstd>(envoy::extensions::compression::zstd::compressor::v3::Zstd const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::compression::zstd::decompressor::v3::Zstd>(envoy::extensions::compression::zstd::decompressor::v3::Zstd const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator>(envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::grpc_credential::v3::FileBasedMetadataConfig>(envoy::config::grpc_credential::v3::FileBasedMetadataConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::grpc_credential::v3::AwsIamConfig>(envoy::config::grpc_credential::v3::AwsIamConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::wasm::v3::WasmService>(envoy::extensions::wasm::v3::WasmService const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::health_checkers::redis::v3::Redis>(envoy::extensions::health_checkers::redis::v3::Redis const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::health_checkers::thrift::v3::Thrift>(envoy::extensions::health_checkers::thrift::v3::Thrift const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::v3::ThriftProtocolOptions>(envoy::extensions::filters::network::thrift_proxy::v3::ThriftProtocolOptions const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::v3::ThriftProxy>(envoy::extensions::filters::network::thrift_proxy::v3::ThriftProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink>(envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::input_matchers::consistent_hashing::v3::ConsistentHashing>(envoy::extensions::matching::input_matchers::consistent_hashing::v3::ConsistentHashing const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::input_matchers::ip::v3::Ip>(envoy::extensions::matching::input_matchers::ip::v3::Ip const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::input_matchers::runtime_fraction::v3::RuntimeFraction>(envoy::extensions::matching::input_matchers::runtime_fraction::v3::RuntimeFraction const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::input_matchers::metadata::v3::Metadata>(envoy::extensions::matching::input_matchers::metadata::v3::Metadata const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::common_inputs::environment_variable::v3::Config>(envoy::extensions::matching::common_inputs::environment_variable::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::matching::common_inputs::network::v3::DynamicMetadataInput>(envoy::extensions::matching::common_inputs::network::v3::DynamicMetadataInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::core::v3::SubstitutionFormatString>(envoy::config::core::v3::SubstitutionFormatString const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::string_matcher::lua::v3::Lua>(envoy::extensions::string_matcher::lua::v3::Lua const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::adaptive_concurrency::v3::AdaptiveConcurrency>(envoy::extensions::filters::http::adaptive_concurrency::v3::AdaptiveConcurrency const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::admission_control::v3::AdmissionControl>(envoy::extensions::filters::http::admission_control::v3::AdmissionControl const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::alternate_protocols_cache::v3::FilterConfig>(envoy::extensions::filters::http::alternate_protocols_cache::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::aws_lambda::v3::PerRouteConfig>(envoy::extensions::filters::http::aws_lambda::v3::PerRouteConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::aws_lambda::v3::Config>(envoy::extensions::filters::http::aws_lambda::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<source::extensions::filters::http::aws_lambda::Request>(source::extensions::filters::http::aws_lambda::Request const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigningPerRoute>(envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigningPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigning>(envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigning const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::bandwidth_limit::v3::BandwidthLimit>(envoy::extensions::filters::http::bandwidth_limit::v3::BandwidthLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::basic_auth::v3::BasicAuthPerRoute>(envoy::extensions::filters::http::basic_auth::v3::BasicAuthPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::basic_auth::v3::BasicAuth>(envoy::extensions::filters::http::basic_auth::v3::BasicAuth const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::buffer::v3::BufferPerRoute>(envoy::extensions::filters::http::buffer::v3::BufferPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::buffer::v3::Buffer>(envoy::extensions::filters::http::buffer::v3::Buffer const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::cache::v3::CacheConfig>(envoy::extensions::filters::http::cache::v3::CacheConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::cdn_loop::v3::CdnLoopConfig>(envoy::extensions::filters::http::cdn_loop::v3::CdnLoopConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::compressor::v3::CompressorPerRoute>(envoy::extensions::filters::http::compressor::v3::CompressorPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::compressor::v3::Compressor>(envoy::extensions::filters::http::compressor::v3::Compressor const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::cors::v3::CorsPolicy>(envoy::extensions::filters::http::cors::v3::CorsPolicy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::cors::v3::Cors>(envoy::extensions::filters::http::cors::v3::Cors const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::composite::v3::Composite>(envoy::extensions::filters::http::composite::v3::Composite const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::composite::v3::ExecuteFilterAction>(envoy::extensions::filters::http::composite::v3::ExecuteFilterAction const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::connect_grpc_bridge::v3::FilterConfig>(envoy::extensions::filters::http::connect_grpc_bridge::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6
    if (!validation_visitor.skipValidation()) {
324
6
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6
    std::string err;
344
6
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
6
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::credential_injector::v3::CredentialInjector>(envoy::extensions::filters::http::credential_injector::v3::CredentialInjector const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::csrf::v3::CsrfPolicy>(envoy::extensions::filters::http::csrf::v3::CsrfPolicy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::custom_response::v3::CustomResponse>(envoy::extensions::filters::http::custom_response::v3::CustomResponse const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
1
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::decompressor::v3::Decompressor>(envoy::extensions::filters::http::decompressor::v3::Decompressor const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::dynamic_forward_proxy::v3::PerRouteConfig>(envoy::extensions::filters::http::dynamic_forward_proxy::v3::PerRouteConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::dynamic_forward_proxy::v3::FilterConfig>(envoy::extensions::filters::http::dynamic_forward_proxy::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::clusters::dynamic_forward_proxy::v3::ClusterConfig>(envoy::extensions::clusters::dynamic_forward_proxy::v3::ClusterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_authz::v3::ExtAuthzPerRoute>(envoy::extensions::filters::http::ext_authz::v3::ExtAuthzPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_authz::v3::ExtAuthz>(envoy::extensions::filters::http::ext_authz::v3::ExtAuthz const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::fault::v3::HTTPFault>(envoy::extensions::filters::http::fault::v3::HTTPFault const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
8
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
8
    if (!validation_visitor.skipValidation()) {
324
8
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
8
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
8
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
8
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
8
    std::string err;
344
8
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
8
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::file_system_buffer::v3::FileSystemBufferFilterConfig>(envoy::extensions::filters::http::file_system_buffer::v3::FileSystemBufferFilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
13
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
13
    if (!validation_visitor.skipValidation()) {
324
13
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
13
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
13
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
13
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
13
    std::string err;
344
13
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
13
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::gcp_authn::v3::GcpAuthnFilterConfig>(envoy::extensions::filters::http::gcp_authn::v3::GcpAuthnFilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::geoip::v3::Geoip>(envoy::extensions::filters::http::geoip::v3::Geoip const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_field_extraction::v3::GrpcFieldExtractionConfig>(envoy::extensions::filters::http::grpc_field_extraction::v3::GrpcFieldExtractionConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_http1_bridge::v3::Config>(envoy::extensions::filters::http::grpc_http1_bridge::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfigPerRoute>(envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfigPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfig>(envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
2
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
2
    if (!validation_visitor.skipValidation()) {
324
2
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
2
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
2
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
2
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
2
    std::string err;
344
2
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
2
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_json_transcoder::v3::GrpcJsonTranscoder>(envoy::extensions::filters::http::grpc_json_transcoder::v3::GrpcJsonTranscoder const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
63
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
63
    if (!validation_visitor.skipValidation()) {
324
63
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
63
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
63
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
63
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
63
    std::string err;
344
63
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
63
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_stats::v3::FilterConfig>(envoy::extensions::filters::http::grpc_stats::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
20
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
20
    if (!validation_visitor.skipValidation()) {
324
20
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
20
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
20
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
20
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
20
    std::string err;
344
20
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
20
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::grpc_web::v3::GrpcWeb>(envoy::extensions::filters::http::grpc_web::v3::GrpcWeb const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::header_to_metadata::v3::Config>(envoy::extensions::filters::http::header_to_metadata::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
10
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
10
    if (!validation_visitor.skipValidation()) {
324
10
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
10
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
10
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
10
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
10
    std::string err;
344
10
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
10
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::health_check::v3::HealthCheck>(envoy::extensions::filters::http::health_check::v3::HealthCheck const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ip_tagging::v3::IPTagging>(envoy::extensions::filters::http::ip_tagging::v3::IPTagging const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6
    if (!validation_visitor.skipValidation()) {
324
6
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6
    std::string err;
344
6
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
6
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::json_to_metadata::v3::JsonToMetadata>(envoy::extensions::filters::http::json_to_metadata::v3::JsonToMetadata const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::jwt_authn::v3::PerRouteConfig>(envoy::extensions::filters::http::jwt_authn::v3::PerRouteConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::jwt_authn::v3::JwtAuthentication>(envoy::extensions::filters::http::jwt_authn::v3::JwtAuthentication const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
151
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
151
    if (!validation_visitor.skipValidation()) {
324
151
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
151
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
151
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
151
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
151
    std::string err;
344
151
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
151
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaOverride>(envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaOverride const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaFilterConfig>(envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaFilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4
    if (!validation_visitor.skipValidation()) {
324
4
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4
    std::string err;
344
4
    if (!Validate(message, &err)) {
345
2
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
2
    }
347
4
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaBucketSettings>(envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaBucketSettings const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::local_ratelimit::v3::LocalRateLimit>(envoy::extensions::filters::http::local_ratelimit::v3::LocalRateLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::lua::v3::LuaPerRoute>(envoy::extensions::filters::http::lua::v3::LuaPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::lua::v3::Lua>(envoy::extensions::filters::http::lua::v3::Lua const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
26
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
26
    if (!validation_visitor.skipValidation()) {
324
26
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
26
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
26
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
26
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
26
    std::string err;
344
26
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
26
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::oauth2::v3::OAuth2>(envoy::extensions::filters::http::oauth2::v3::OAuth2 const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::on_demand::v3::PerRouteConfig>(envoy::extensions::filters::http::on_demand::v3::PerRouteConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::on_demand::v3::OnDemand>(envoy::extensions::filters::http::on_demand::v3::OnDemand const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
2
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
2
    if (!validation_visitor.skipValidation()) {
324
2
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
2
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
2
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
2
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
2
    std::string err;
344
2
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
2
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::original_src::v3::OriginalSrc>(envoy::extensions::filters::http::original_src::v3::OriginalSrc const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::proto_message_extraction::v3::ProtoMessageExtractionConfig>(envoy::extensions::filters::http::proto_message_extraction::v3::ProtoMessageExtractionConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ratelimit::v3::RateLimitPerRoute>(envoy::extensions::filters::http::ratelimit::v3::RateLimitPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ratelimit::v3::RateLimit>(envoy::extensions::filters::http::ratelimit::v3::RateLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
3
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
3
    if (!validation_visitor.skipValidation()) {
324
3
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
3
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
3
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
3
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
3
    std::string err;
344
3
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
3
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::rbac::v3::RBACPerRoute>(envoy::extensions::filters::http::rbac::v3::RBACPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::rbac::v3::RBAC>(envoy::extensions::filters::http::rbac::v3::RBAC const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
428
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
428
    if (!validation_visitor.skipValidation()) {
324
428
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
428
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
428
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
428
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
428
    std::string err;
344
428
    if (!Validate(message, &err)) {
345
17
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
17
    }
347
428
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::set_filter_state::v3::Config>(envoy::extensions::filters::http::set_filter_state::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::set_metadata::v3::Config>(envoy::extensions::filters::http::set_metadata::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6
    if (!validation_visitor.skipValidation()) {
324
6
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6
    std::string err;
344
6
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
6
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::tap::v3::Tap>(envoy::extensions::filters::http::tap::v3::Tap const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
82
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
82
    if (!validation_visitor.skipValidation()) {
324
82
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
82
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
82
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
82
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
82
    std::string err;
344
82
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
82
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::thrift_to_metadata::v3::ThriftToMetadata>(envoy::extensions::filters::http::thrift_to_metadata::v3::ThriftToMetadata const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4
    if (!validation_visitor.skipValidation()) {
324
4
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4
    std::string err;
344
4
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
4
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::wasm::v3::Wasm>(envoy::extensions::filters::http::wasm::v3::Wasm const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
16
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
16
    if (!validation_visitor.skipValidation()) {
324
16
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
16
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
16
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
16
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
16
    std::string err;
344
16
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
16
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::stateful_session::v3::StatefulSessionPerRoute>(envoy::extensions::filters::http::stateful_session::v3::StatefulSessionPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::stateful_session::v3::StatefulSession>(envoy::extensions::filters::http::stateful_session::v3::StatefulSession const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::http::header_mutation::v3::HeaderMutationPerRoute>(envoy::extensions::filters::http::header_mutation::v3::HeaderMutationPerRoute const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::header_mutation::v3::HeaderMutation>(envoy::extensions::filters::http::header_mutation::v3::HeaderMutation const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6
    if (!validation_visitor.skipValidation()) {
324
6
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6
    std::string err;
344
6
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
6
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::listener::local_ratelimit::v3::LocalRateLimit>(envoy::extensions::filters::listener::local_ratelimit::v3::LocalRateLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::listener::original_src::v3::OriginalSrc>(envoy::extensions::filters::listener::original_src::v3::OriginalSrc const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::listener::proxy_protocol::v3::ProxyProtocol>(envoy::extensions::filters::listener::proxy_protocol::v3::ProxyProtocol const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
60
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
60
    if (!validation_visitor.skipValidation()) {
324
60
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
60
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
60
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
60
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
60
    std::string err;
344
60
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
60
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::listener::tls_inspector::v3::TlsInspector>(envoy::extensions::filters::listener::tls_inspector::v3::TlsInspector const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit>(envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::direct_response::v3::Config>(envoy::extensions::filters::network::direct_response::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::dubbo_proxy::v3::MultipleRouteConfiguration>(envoy::extensions::filters::network::dubbo_proxy::v3::MultipleRouteConfiguration const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::dubbo_proxy::v3::DubboProxy>(envoy::extensions::filters::network::dubbo_proxy::v3::DubboProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::dubbo_proxy::router::v3::Router>(envoy::extensions::filters::network::dubbo_proxy::router::v3::Router const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::echo::v3::Echo>(envoy::extensions::filters::network::echo::v3::Echo const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::ext_authz::v3::ExtAuthz>(envoy::extensions::filters::network::ext_authz::v3::ExtAuthz const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
8
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
8
    if (!validation_visitor.skipValidation()) {
324
8
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
8
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
8
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
8
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
8
    std::string err;
344
8
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
8
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::local_ratelimit::v3::LocalRateLimit>(envoy::extensions::filters::network::local_ratelimit::v3::LocalRateLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
3
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
3
    if (!validation_visitor.skipValidation()) {
324
3
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
3
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
3
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
3
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
3
    std::string err;
344
3
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
3
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::mongo_proxy::v3::MongoProxy>(envoy::extensions::filters::network::mongo_proxy::v3::MongoProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.89k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.89k
    if (!validation_visitor.skipValidation()) {
324
1.89k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.89k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.89k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.89k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.89k
    std::string err;
344
1.89k
    if (!Validate(message, &err)) {
345
57
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
57
    }
347
1.89k
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::ratelimit::v3::RateLimit>(envoy::extensions::filters::network::ratelimit::v3::RateLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4
    if (!validation_visitor.skipValidation()) {
324
4
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4
    std::string err;
344
4
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
4
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::rbac::v3::RBAC>(envoy::extensions::filters::network::rbac::v3::RBAC const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
647
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
647
    if (!validation_visitor.skipValidation()) {
324
647
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
647
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
647
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
647
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
647
    std::string err;
344
647
    if (!Validate(message, &err)) {
345
24
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
24
    }
347
647
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::tcp_proxy::v3::TcpProxy>(envoy::extensions::filters::network::tcp_proxy::v3::TcpProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::v3::RouteConfiguration>(envoy::extensions::filters::network::thrift_proxy::v3::RouteConfiguration const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::router::v3::Router>(envoy::extensions::filters::network::thrift_proxy::router::v3::Router const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::set_filter_state::v3::Config>(envoy::extensions::filters::network::set_filter_state::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::sni_dynamic_forward_proxy::v3::FilterConfig>(envoy::extensions::filters::network::sni_dynamic_forward_proxy::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::wasm::v3::Wasm>(envoy::extensions::filters::network::wasm::v3::Wasm const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::zookeeper_proxy::v3::ZooKeeperProxy>(envoy::extensions::filters::network::zookeeper_proxy::v3::ZooKeeperProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
831
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
831
    if (!validation_visitor.skipValidation()) {
324
831
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
831
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
831
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
831
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
831
    std::string err;
344
831
    if (!Validate(message, &err)) {
345
4
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
4
    }
347
831
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::generic_proxy::v3::RouteConfiguration>(envoy::extensions::filters::network::generic_proxy::v3::RouteConfiguration const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::generic_proxy::v3::GenericProxy>(envoy::extensions::filters::network::generic_proxy::v3::GenericProxy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::generic_proxy::action::v3::RouteAction>(envoy::extensions::filters::network::generic_proxy::action::v3::RouteAction const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::generic_proxy::matcher::v3::PropertyMatchInput>(envoy::extensions::filters::network::generic_proxy::matcher::v3::PropertyMatchInput const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::generic_proxy::matcher::v3::RequestMatcher>(envoy::extensions::filters::network::generic_proxy::matcher::v3::RequestMatcher const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::udp::dns_filter::v3::DnsFilterConfig>(envoy::extensions::filters::udp::dns_filter::v3::DnsFilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig>(envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::udp::udp_proxy::v3::Route>(envoy::extensions::filters::udp::udp_proxy::v3::Route const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::udp::udp_proxy::session::http_capsule::v3::FilterConfig>(envoy::extensions::filters::udp::udp_proxy::session::http_capsule::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::udp::udp_proxy::session::dynamic_forward_proxy::v3::FilterConfig>(envoy::extensions::filters::udp::udp_proxy::session::dynamic_forward_proxy::v3::FilterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::resource_monitors::fixed_heap::v3::FixedHeapConfig>(envoy::extensions::resource_monitors::fixed_heap::v3::FixedHeapConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::resource_monitors::injected_resource::v3::InjectedResourceConfig>(envoy::extensions::resource_monitors::injected_resource::v3::InjectedResourceConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::resource_monitors::downstream_connections::v3::DownstreamConnectionsConfig>(envoy::extensions::resource_monitors::downstream_connections::v3::DownstreamConnectionsConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::resource_monitors::cpu_utilization::v3::CpuUtilizationConfig>(envoy::extensions::resource_monitors::cpu_utilization::v3::CpuUtilizationConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::metrics::v3::DogStatsdSink>(envoy::config::metrics::v3::DogStatsdSink const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::stat_sinks::graphite_statsd::v3::GraphiteStatsdSink>(envoy::extensions::stat_sinks::graphite_statsd::v3::GraphiteStatsdSink const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::metrics::v3::HystrixSink>(envoy::config::metrics::v3::HystrixSink const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::metrics::v3::MetricsServiceConfig>(envoy::config::metrics::v3::MetricsServiceConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::stat_sinks::open_telemetry::v3::SinkConfig>(envoy::extensions::stat_sinks::open_telemetry::v3::SinkConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::metrics::v3::StatsdSink>(envoy::config::metrics::v3::StatsdSink const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::stat_sinks::wasm::v3::Wasm>(envoy::extensions::stat_sinks::wasm::v3::Wasm const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::filters::header_to_metadata::v3::HeaderToMetadata>(envoy::extensions::filters::network::thrift_proxy::filters::header_to_metadata::v3::HeaderToMetadata const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::filters::payload_to_metadata::v3::PayloadToMetadata>(envoy::extensions::filters::network::thrift_proxy::filters::payload_to_metadata::v3::PayloadToMetadata const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::thrift_proxy::filters::ratelimit::v3::RateLimit>(envoy::extensions::filters::network::thrift_proxy::filters::ratelimit::v3::RateLimit const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::trace::v3::DatadogConfig>(envoy::config::trace::v3::DatadogConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::trace::v3::ZipkinConfig>(envoy::config::trace::v3::ZipkinConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::trace::v3::OpenCensusConfig>(envoy::config::trace::v3::OpenCensusConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::trace::v3::XRayConfig>(envoy::config::trace::v3::XRayConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::trace::v3::SkyWalkingConfig>(envoy::config::trace::v3::SkyWalkingConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::config::trace::v3::OpenTelemetryConfig>(envoy::config::trace::v3::OpenTelemetryConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::tracers::opentelemetry::resource_detectors::v3::EnvironmentResourceDetectorConfig>(envoy::extensions::tracers::opentelemetry::resource_detectors::v3::EnvironmentResourceDetectorConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::tracers::opentelemetry::resource_detectors::v3::DynatraceResourceDetectorConfig>(envoy::extensions::tracers::opentelemetry::resource_detectors::v3::DynatraceResourceDetectorConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::tracers::opentelemetry::resource_detectors::v3::StaticConfigResourceDetectorConfig>(envoy::extensions::tracers::opentelemetry::resource_detectors::v3::StaticConfigResourceDetectorConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::tracers::opentelemetry::samplers::v3::DynatraceSamplerConfig>(envoy::extensions::tracers::opentelemetry::samplers::v3::DynatraceSamplerConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::alts::v3::Alts>(envoy::extensions::transport_sockets::alts::v3::Alts const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::http_11_proxy::v3::Http11ProxyUpstreamTransport>(envoy::extensions::transport_sockets::http_11_proxy::v3::Http11ProxyUpstreamTransport const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::proxy_protocol::v3::ProxyProtocolUpstreamTransport>(envoy::extensions::transport_sockets::proxy_protocol::v3::ProxyProtocolUpstreamTransport const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::tap::v3::Tap>(envoy::extensions::transport_sockets::tap::v3::Tap const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::admin::v3::TapRequest>(envoy::admin::v3::TapRequest const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::starttls::v3::StartTlsConfig>(envoy::extensions::transport_sockets::starttls::v3::StartTlsConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::starttls::v3::UpstreamStartTlsConfig>(envoy::extensions::transport_sockets::starttls::v3::UpstreamStartTlsConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::tcp_stats::v3::Config>(envoy::extensions::transport_sockets::tcp_stats::v3::Config const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::transport_sockets::internal_upstream::v3::InternalUpstreamTransport>(envoy::extensions::transport_sockets::internal_upstream::v3::InternalUpstreamTransport const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::retry::host::omit_host_metadata::v3::OmitHostMetadataConfig>(envoy::extensions::retry::host::omit_host_metadata::v3::OmitHostMetadataConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::retry::priority::previous_priorities::v3::PreviousPrioritiesConfig>(envoy::extensions::retry::priority::previous_priorities::v3::PreviousPrioritiesConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::internal_redirect::allow_listed_routes::v3::AllowListedRoutesConfig>(envoy::extensions::internal_redirect::allow_listed_routes::v3::AllowListedRoutesConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::rate_limit_descriptors::expr::v3::Descriptor>(envoy::extensions::rate_limit_descriptors::expr::v3::Descriptor const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::bootstrap::internal_listener::v3::InternalListener>(envoy::extensions::bootstrap::internal_listener::v3::InternalListener const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::header_formatters::preserve_case::v3::PreserveCaseFormatterConfig>(envoy::extensions::http::header_formatters::preserve_case::v3::PreserveCaseFormatterConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::original_ip_detection::custom_header::v3::CustomHeaderConfig>(envoy::extensions::http::original_ip_detection::custom_header::v3::CustomHeaderConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::stateful_session::cookie::v3::CookieBasedSessionState>(envoy::extensions::http::stateful_session::cookie::v3::CookieBasedSessionState const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::stateful_session::header::v3::HeaderBasedSessionState>(envoy::extensions::http::stateful_session::header::v3::HeaderBasedSessionState const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::custom_response::redirect_policy::v3::RedirectPolicy>(envoy::extensions::http::custom_response::redirect_policy::v3::RedirectPolicy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::custom_response::local_response_policy::v3::LocalResponsePolicy>(envoy::extensions::http::custom_response::local_response_policy::v3::LocalResponsePolicy const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::injected_credentials::generic::v3::Generic>(envoy::extensions::http::injected_credentials::generic::v3::Generic const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::injected_credentials::oauth2::v3::OAuth2>(envoy::extensions::http::injected_credentials::oauth2::v3::OAuth2 const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig>(envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::quic::server_preferred_address::v3::DataSourceServerPreferredAddressConfig>(envoy::extensions::quic::server_preferred_address::v3::DataSourceServerPreferredAddressConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig>(envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<envoy::config::rbac::v3::Action>(envoy::config::rbac::v3::Action const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1
    if (!validation_visitor.skipValidation()) {
324
1
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1
    std::string err;
344
1
    if (!Validate(message, &err)) {
345
1
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
1
    }
347
1
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<xds::type::matcher::v3::IPMatcher>(xds::type::matcher::v3::IPMatcher const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::http::early_header_mutation::header_mutation::v3::HeaderMutation>(envoy::extensions::http::early_header_mutation::header_mutation::v3::HeaderMutation const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::geoip_providers::maxmind::v3::MaxMindConfig>(envoy::extensions::geoip_providers::maxmind::v3::MaxMindConfig const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Unexecuted instantiation: void Envoy::MessageUtil::validate<envoy::extensions::filters::network::generic_proxy::router::v3::Router>(envoy::extensions::filters::network::generic_proxy::router::v3::Router const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<test::common::http::PathUtilityTestCase>(test::common::http::PathUtilityTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.14k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.14k
    if (!validation_visitor.skipValidation()) {
324
1.14k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.14k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.14k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.14k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.14k
    std::string err;
344
1.14k
    if (!Validate(message, &err)) {
345
65
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
65
    }
347
1.14k
  }
void Envoy::MessageUtil::validate<test::server::config_validation::XdsTestCase>(test::server::config_validation::XdsTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
25
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
25
    if (!validation_visitor.skipValidation()) {
324
25
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
25
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
25
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
25
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
25
    std::string err;
344
25
    if (!Validate(message, &err)) {
345
18
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
18
    }
347
25
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::local_ratelimit::LocalRateLimitTestCase>(envoy::extensions::filters::network::local_ratelimit::LocalRateLimitTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.06k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.06k
    if (!validation_visitor.skipValidation()) {
324
1.06k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.06k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.06k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.06k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.06k
    std::string err;
344
1.06k
    if (!Validate(message, &err)) {
345
74
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
74
    }
347
1.06k
  }
void Envoy::MessageUtil::validate<test::common::http::CodecImplFuzzTestCase>(test::common::http::CodecImplFuzzTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
16.4k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
16.4k
    if (!validation_visitor.skipValidation()) {
324
16.4k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
16.4k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
16.4k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
16.4k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
16.4k
    std::string err;
344
16.4k
    if (!Validate(message, &err)) {
345
41
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
41
    }
347
16.4k
  }
void Envoy::MessageUtil::validate<test::common::upstream::HealthCheckTestCase>(test::common::upstream::HealthCheckTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
3.67k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
3.67k
    if (!validation_visitor.skipValidation()) {
324
3.67k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
3.67k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
3.67k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
3.67k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
3.67k
    std::string err;
344
3.67k
    if (!Validate(message, &err)) {
345
292
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
292
    }
347
3.67k
  }
void Envoy::MessageUtil::validate<test::common::router::TestCase>(test::common::router::TestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
5.76k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
5.76k
    if (!validation_visitor.skipValidation()) {
324
5.76k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
5.76k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
5.76k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
5.76k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
5.76k
    std::string err;
344
5.76k
    if (!Validate(message, &err)) {
345
636
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
636
    }
347
5.76k
  }
void Envoy::MessageUtil::validate<test::extensions::filters::listener::tls_inspector::TlsInspectorTestCase>(test::extensions::filters::listener::tls_inspector::TlsInspectorTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
138
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
138
    if (!validation_visitor.skipValidation()) {
324
138
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
138
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
138
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
138
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
138
    std::string err;
344
138
    if (!Validate(message, &err)) {
345
137
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
137
    }
347
138
  }
void Envoy::MessageUtil::validate<test::extensions::filters::network::FilterFuzzTestCase>(test::extensions::filters::network::FilterFuzzTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
8.40k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
8.40k
    if (!validation_visitor.skipValidation()) {
324
8.40k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
8.40k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
8.40k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
8.40k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
8.40k
    std::string err;
344
8.40k
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
8.40k
  }
void Envoy::MessageUtil::validate<test::extensions::filters::listener::original_src::OriginalSrcTestCase>(test::extensions::filters::listener::original_src::OriginalSrcTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.16k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.16k
    if (!validation_visitor.skipValidation()) {
324
1.16k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.16k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.16k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.16k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.16k
    std::string err;
344
1.16k
    if (!Validate(message, &err)) {
345
54
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
54
    }
347
1.16k
  }
void Envoy::MessageUtil::validate<test::extensions::filters::listener::proxy_protocol::ProxyProtocolTestCase>(test::extensions::filters::listener::proxy_protocol::ProxyProtocolTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
125
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
125
    if (!validation_visitor.skipValidation()) {
324
125
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
125
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
125
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
125
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
125
    std::string err;
344
125
    if (!Validate(message, &err)) {
345
124
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
124
    }
347
125
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::rbac::RbacTestCase>(envoy::extensions::filters::http::rbac::RbacTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
16.5k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
16.5k
    if (!validation_visitor.skipValidation()) {
324
16.5k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
16.5k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
16.5k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
16.5k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
16.5k
    std::string err;
344
16.5k
    if (!Validate(message, &err)) {
345
778
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
778
    }
347
16.5k
  }
void Envoy::MessageUtil::validate<test::common::router::RouteTestCase>(test::common::router::RouteTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
10.4k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
10.4k
    if (!validation_visitor.skipValidation()) {
324
10.4k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
10.4k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
10.4k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
10.4k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
10.4k
    std::string err;
344
10.4k
    if (!Validate(message, &err)) {
345
144
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
144
    }
347
10.4k
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_authz::ExtAuthzTestCaseGrpc>(envoy::extensions::filters::http::ext_authz::ExtAuthzTestCaseGrpc const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
6.08k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
6.08k
    if (!validation_visitor.skipValidation()) {
324
6.08k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
6.08k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
6.08k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
6.08k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
6.08k
    std::string err;
344
6.08k
    if (!Validate(message, &err)) {
345
408
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
408
    }
347
6.08k
  }
void Envoy::MessageUtil::validate<test::extensions::filters::http::ext_proc::ExtProcGrpcTestCase>(test::extensions::filters::http::ext_proc::ExtProcGrpcTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
815
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
815
    if (!validation_visitor.skipValidation()) {
324
815
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
815
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
815
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
815
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
815
    std::string err;
344
815
    if (!Validate(message, &err)) {
345
0
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
0
    }
347
815
  }
void Envoy::MessageUtil::validate<test::extensions::filters::http::FilterFuzzTestCase>(test::extensions::filters::http::FilterFuzzTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
886
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
886
    if (!validation_visitor.skipValidation()) {
324
886
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
886
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
886
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
886
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
886
    std::string err;
344
886
    if (!Validate(message, &err)) {
345
2
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
2
    }
347
886
  }
void Envoy::MessageUtil::validate<test::extensions::filters::common::expr::EvaluatorTestCase>(test::extensions::filters::common::expr::EvaluatorTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
21.8k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
21.8k
    if (!validation_visitor.skipValidation()) {
324
21.8k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
21.8k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
21.8k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
21.8k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
21.8k
    std::string err;
344
21.8k
    if (!Validate(message, &err)) {
345
246
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
246
    }
347
21.8k
  }
void Envoy::MessageUtil::validate<test::common::upstream::RandomLoadBalancerTestCase>(test::common::upstream::RandomLoadBalancerTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
683
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
683
    if (!validation_visitor.skipValidation()) {
324
683
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
683
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
683
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
683
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
683
    std::string err;
344
683
    if (!Validate(message, &err)) {
345
77
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
77
    }
347
683
  }
void Envoy::MessageUtil::validate<test::extensions::http::header_validators::envoy_default::PathNormalizerFuzzTestCase>(test::extensions::http::header_validators::envoy_default::PathNormalizerFuzzTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
850
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
850
    if (!validation_visitor.skipValidation()) {
324
850
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
850
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
850
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
850
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
850
    std::string err;
344
850
    if (!Validate(message, &err)) {
345
81
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
81
    }
347
850
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::http::ext_authz::ExtAuthzTestCaseHttp>(envoy::extensions::filters::http::ext_authz::ExtAuthzTestCaseHttp const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
4.14k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
4.14k
    if (!validation_visitor.skipValidation()) {
324
4.14k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
4.14k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
4.14k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
4.14k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
4.14k
    std::string err;
344
4.14k
    if (!Validate(message, &err)) {
345
670
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
670
    }
347
4.14k
  }
void Envoy::MessageUtil::validate<test::common::upstream::RoundRobinLoadBalancerTestCase>(test::common::upstream::RoundRobinLoadBalancerTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.19k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.19k
    if (!validation_visitor.skipValidation()) {
324
1.19k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.19k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.19k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.19k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.19k
    std::string err;
344
1.19k
    if (!Validate(message, &err)) {
345
90
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
90
    }
347
1.19k
  }
Unexecuted instantiation: void Envoy::MessageUtil::validate<test::extensions::filters::listener::FilterFuzzWithDataTestCase>(test::extensions::filters::listener::FilterFuzzWithDataTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
void Envoy::MessageUtil::validate<test::common::http::UtilityTestCase>(test::common::http::UtilityTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
113
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
113
    if (!validation_visitor.skipValidation()) {
324
113
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
113
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
113
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
113
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
113
    std::string err;
344
113
    if (!Validate(message, &err)) {
345
2
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
2
    }
347
113
  }
void Envoy::MessageUtil::validate<test::common::upstream::LeastRequestLoadBalancerTestCase>(test::common::upstream::LeastRequestLoadBalancerTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
1.25k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
1.25k
    if (!validation_visitor.skipValidation()) {
324
1.25k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
1.25k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
1.25k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
1.25k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
1.25k
    std::string err;
344
1.25k
    if (!Validate(message, &err)) {
345
45
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
45
    }
347
1.25k
  }
void Envoy::MessageUtil::validate<envoy::extensions::filters::network::ext_authz::ExtAuthzTestCase>(envoy::extensions::filters::network::ext_authz::ExtAuthzTestCase const&, Envoy::ProtobufMessage::ValidationVisitor&, bool)
Line
Count
Source
317
2.41k
                       bool recurse_into_any = false) {
318
    // TODO(adisuissa): There are multiple recursive traversals done by the
319
    // calls in this function. This can be refactored into a single recursive
320
    // traversal that invokes the various validators.
321
322
    // Log warnings or throw errors if deprecated fields or unknown fields are in use.
323
2.41k
    if (!validation_visitor.skipValidation()) {
324
2.41k
      checkForUnexpectedFields(message, validation_visitor, recurse_into_any);
325
2.41k
    }
326
327
    // Throw an exception if the config has an invalid Duration field. This is needed
328
    // because Envoy validates the duration in a strict way that is not supported by PGV.
329
2.41k
    validateDurationFields(message, recurse_into_any);
330
331
    // TODO(mattklein123): This will recurse the message twice, once above and once for PGV. When
332
    // we move to always recursing, satisfying the TODO below, we should merge into a single
333
    // recursion for performance reasons.
334
2.41k
    if (recurse_into_any) {
335
0
      return recursivePgvCheck(message);
336
0
    }
337
338
    // TODO(mattklein123): Now that PGV is capable of doing recursive message checks on abstract
339
    // types, we can remove bottom up validation from the entire codebase and only validate
340
    // at top level ingestion (bootstrap, discovery response). This is a large change and will be
341
    // done as a separate PR. This change will also allow removing templating from most/all of
342
    // related functions.
343
2.41k
    std::string err;
344
2.41k
    if (!Validate(message, &err)) {
345
494
      ProtoExceptionUtil::throwProtoValidationException(err, message);
346
494
    }
347
2.41k
  }
348
349
#ifdef ENVOY_ENABLE_YAML
350
  template <class MessageType>
351
  static void loadFromYamlAndValidate(const std::string& yaml, MessageType& message,
352
0
                                      ProtobufMessage::ValidationVisitor& validation_visitor) {
353
0
    loadFromYaml(yaml, message, validation_visitor);
354
0
    validate(message, validation_visitor);
355
0
  }
Unexecuted instantiation: void Envoy::MessageUtil::loadFromYamlAndValidate<envoy::config::core::v3::HealthCheck>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, envoy::config::core::v3::HealthCheck&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::loadFromYamlAndValidate<envoy::admin::v3::TapRequest>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, envoy::admin::v3::TapRequest&, Envoy::ProtobufMessage::ValidationVisitor&)
356
#endif
357
358
  /**
359
   * Downcast and validate protoc-gen-validate constraints on a given protobuf.
360
   * Note the corresponding `.pb.validate.h` for the message has to be included in the source file
361
   * of caller.
362
   * @param message const Protobuf::Message& to downcast and validate.
363
   * @return const MessageType& the concrete message type downcasted to on success.
364
   * @throw EnvoyException if the message does not satisfy its type constraints.
365
   */
366
  template <class MessageType>
367
  static const MessageType&
368
  downcastAndValidate(const Protobuf::Message& config,
369
142k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
142k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
142k
    validate(typed_config, validation_visitor);
372
142k
    return typed_config;
373
142k
  }
envoy::extensions::request_id::uuid::v3::UuidRequestIdConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::request_id::uuid::v3::UuidRequestIdConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6.30k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6.30k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6.30k
    validate(typed_config, validation_visitor);
372
6.30k
    return typed_config;
373
6.30k
  }
envoy::extensions::upstreams::http::v3::HttpProtocolOptions const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::upstreams::http::v3::HttpProtocolOptions const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1.54k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1.54k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1.54k
    validate(typed_config, validation_visitor);
372
1.54k
    return typed_config;
373
1.54k
  }
Unexecuted instantiation: envoy::extensions::upstreams::tcp::v3::TcpProtocolOptions const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::upstreams::tcp::v3::TcpProtocolOptions const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::ext_proc::v3::ExtProcPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ext_proc::v3::ExtProcPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::ext_proc::v3::ExternalProcessor const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ext_proc::v3::ExternalProcessor const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
806
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
806
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
806
    validate(typed_config, validation_visitor);
372
806
    return typed_config;
373
806
  }
envoy::extensions::filters::http::upstream_codec::v3::UpstreamCodec const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::upstream_codec::v3::UpstreamCodec const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
2.40k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
2.40k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
2.40k
    validate(typed_config, validation_visitor);
372
2.40k
    return typed_config;
373
2.40k
  }
envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
9.09k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
9.09k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
9.09k
    validate(typed_config, validation_visitor);
372
9.09k
    return typed_config;
373
9.09k
  }
Unexecuted instantiation: envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::quic::v3::QuicUpstreamTransport const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::quic::v3::QuicUpstreamTransport const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::type::matcher::v3::HttpRequestHeaderMatchInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::type::matcher::v3::HttpRequestHeaderMatchInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
21.1k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
21.1k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
21.1k
    validate(typed_config, validation_visitor);
372
21.1k
    return typed_config;
373
21.1k
  }
envoy::type::matcher::v3::HttpResponseHeaderMatchInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::type::matcher::v3::HttpResponseHeaderMatchInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6.12k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6.12k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6.12k
    validate(typed_config, validation_visitor);
372
6.12k
    return typed_config;
373
6.12k
  }
envoy::type::matcher::v3::HttpRequestTrailerMatchInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::type::matcher::v3::HttpRequestTrailerMatchInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
4.74k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
4.74k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
4.74k
    validate(typed_config, validation_visitor);
372
4.74k
    return typed_config;
373
4.74k
  }
envoy::type::matcher::v3::HttpResponseTrailerMatchInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::type::matcher::v3::HttpResponseTrailerMatchInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
953
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
953
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
953
    validate(typed_config, validation_visitor);
372
953
    return typed_config;
373
953
  }
envoy::type::matcher::v3::HttpRequestQueryParamMatchInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::type::matcher::v3::HttpRequestQueryParamMatchInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
envoy::config::route::v3::Route const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::route::v3::Route const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
64.9k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
64.9k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
64.9k
    validate(typed_config, validation_visitor);
372
64.9k
    return typed_config;
373
64.9k
  }
Unexecuted instantiation: envoy::config::route::v3::RouteList const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::route::v3::RouteList const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::common_inputs::network::v3::FilterStateInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::common_inputs::network::v3::FilterStateInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::path::match::uri_template::v3::UriTemplateMatchConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::path::match::uri_template::v3::UriTemplateMatchConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1.61k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1.61k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1.61k
    validate(typed_config, validation_visitor);
372
1.61k
    return typed_config;
373
1.61k
  }
envoy::extensions::path::rewrite::uri_template::v3::UriTemplateRewriteConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::path::rewrite::uri_template::v3::UriTemplateRewriteConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1.08k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1.08k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1.08k
    validate(typed_config, validation_visitor);
372
1.08k
    return typed_config;
373
1.08k
  }
Unexecuted instantiation: envoy::extensions::http::header_validators::envoy_default::v3::HeaderValidatorConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::header_validators::envoy_default::v3::HeaderValidatorConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::http::original_ip_detection::xff::v3::XffConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::original_ip_detection::xff::v3::XffConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6.26k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6.26k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6.26k
    validate(typed_config, validation_visitor);
372
6.26k
    return typed_config;
373
6.26k
  }
envoy::extensions::filters::http::router::v3::Router const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::router::v3::Router const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
4.10k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
4.10k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
4.10k
    validate(typed_config, validation_visitor);
372
4.10k
    return typed_config;
373
4.10k
  }
Unexecuted instantiation: test::integration::filters::AddBodyFilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<test::integration::filters::AddBodyFilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: test::integration::filters::CrashFilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<test::integration::filters::CrashFilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::config::route::v3::ScopedRouteConfiguration const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::route::v3::ScopedRouteConfiguration const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
3.32k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
3.32k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
3.32k
    validate(typed_config, validation_visitor);
372
3.32k
    return typed_config;
373
3.32k
  }
Unexecuted instantiation: envoy::extensions::transport_sockets::tls::v3::DownstreamTlsContext const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::tls::v3::DownstreamTlsContext const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::tls::v3::UpstreamTlsContext const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::tls::v3::UpstreamTlsContext const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::quic::v3::QuicDownstreamTransport const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::quic::v3::QuicDownstreamTransport const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::access_loggers::file::v3::FileAccessLog const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::file::v3::FileAccessLog const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
4.10k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
4.10k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
4.10k
    validate(typed_config, validation_visitor);
372
4.10k
    return typed_config;
373
4.10k
  }
Unexecuted instantiation: envoy::extensions::access_loggers::fluentd::v3::FluentdAccessLogConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::fluentd::v3::FluentdAccessLogConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::access_loggers::grpc::v3::HttpGrpcAccessLogConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::grpc::v3::HttpGrpcAccessLogConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::access_loggers::grpc::v3::TcpGrpcAccessLogConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::grpc::v3::TcpGrpcAccessLogConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::open_telemetry::v3::OpenTelemetryAccessLogConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::access_loggers::stream::v3::StdoutAccessLog const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::stream::v3::StdoutAccessLog const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::access_loggers::stream::v3::StderrAccessLog const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::stream::v3::StderrAccessLog const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::access_loggers::wasm::v3::WasmAccessLog const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::access_loggers::wasm::v3::WasmAccessLog const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::clusters::aggregate::v3::ClusterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::clusters::aggregate::v3::ClusterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::clusters::redis::v3::RedisClusterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::clusters::redis::v3::RedisClusterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::redis_proxy::v3::RedisProtocolOptions const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::redis_proxy::v3::RedisProtocolOptions const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::redis_proxy::v3::RedisProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::redis_proxy::v3::RedisProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::compression::gzip::compressor::v3::Gzip const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::compression::gzip::compressor::v3::Gzip const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::compression::gzip::decompressor::v3::Gzip const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::compression::gzip::decompressor::v3::Gzip const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::compression::brotli::compressor::v3::Brotli const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::compression::brotli::compressor::v3::Brotli const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::compression::brotli::decompressor::v3::Brotli const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::compression::brotli::decompressor::v3::Brotli const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::compression::zstd::compressor::v3::Zstd const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::compression::zstd::compressor::v3::Zstd const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::compression::zstd::decompressor::v3::Zstd const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::compression::zstd::decompressor::v3::Zstd const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::grpc_credential::v3::FileBasedMetadataConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::grpc_credential::v3::FileBasedMetadataConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::grpc_credential::v3::AwsIamConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::grpc_credential::v3::AwsIamConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::wasm::v3::WasmService const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::wasm::v3::WasmService const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::health_checkers::redis::v3::Redis const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::health_checkers::redis::v3::Redis const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::health_checkers::thrift::v3::Thrift const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::health_checkers::thrift::v3::Thrift const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::thrift_proxy::v3::ThriftProtocolOptions const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::thrift_proxy::v3::ThriftProtocolOptions const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::thrift_proxy::v3::ThriftProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::thrift_proxy::v3::ThriftProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::input_matchers::consistent_hashing::v3::ConsistentHashing const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::input_matchers::consistent_hashing::v3::ConsistentHashing const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::input_matchers::ip::v3::Ip const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::input_matchers::ip::v3::Ip const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::input_matchers::runtime_fraction::v3::RuntimeFraction const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::input_matchers::runtime_fraction::v3::RuntimeFraction const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::input_matchers::metadata::v3::Metadata const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::input_matchers::metadata::v3::Metadata const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::common_inputs::environment_variable::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::common_inputs::environment_variable::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::matching::common_inputs::network::v3::DynamicMetadataInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::matching::common_inputs::network::v3::DynamicMetadataInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::core::v3::SubstitutionFormatString const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::core::v3::SubstitutionFormatString const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::string_matcher::lua::v3::Lua const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::string_matcher::lua::v3::Lua const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::adaptive_concurrency::v3::AdaptiveConcurrency const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::adaptive_concurrency::v3::AdaptiveConcurrency const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::admission_control::v3::AdmissionControl const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::admission_control::v3::AdmissionControl const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::alternate_protocols_cache::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::alternate_protocols_cache::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::aws_lambda::v3::PerRouteConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::aws_lambda::v3::PerRouteConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::aws_lambda::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::aws_lambda::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigningPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigningPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigning const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::aws_request_signing::v3::AwsRequestSigning const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::bandwidth_limit::v3::BandwidthLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::bandwidth_limit::v3::BandwidthLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: envoy::extensions::filters::http::basic_auth::v3::BasicAuthPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::basic_auth::v3::BasicAuthPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::basic_auth::v3::BasicAuth const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::basic_auth::v3::BasicAuth const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: envoy::extensions::filters::http::buffer::v3::BufferPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::buffer::v3::BufferPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::buffer::v3::Buffer const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::buffer::v3::Buffer const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::cache::v3::CacheConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::cache::v3::CacheConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::cdn_loop::v3::CdnLoopConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::cdn_loop::v3::CdnLoopConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: envoy::extensions::filters::http::compressor::v3::CompressorPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::compressor::v3::CompressorPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::compressor::v3::Compressor const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::compressor::v3::Compressor const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::cors::v3::CorsPolicy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::cors::v3::CorsPolicy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::cors::v3::Cors const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::cors::v3::Cors const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::composite::v3::Composite const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::composite::v3::Composite const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::composite::v3::ExecuteFilterAction const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::composite::v3::ExecuteFilterAction const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::connect_grpc_bridge::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::connect_grpc_bridge::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6
    validate(typed_config, validation_visitor);
372
6
    return typed_config;
373
6
  }
Unexecuted instantiation: envoy::extensions::filters::http::credential_injector::v3::CredentialInjector const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::credential_injector::v3::CredentialInjector const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::csrf::v3::CsrfPolicy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::csrf::v3::CsrfPolicy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::custom_response::v3::CustomResponse const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::custom_response::v3::CustomResponse const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
envoy::extensions::filters::http::decompressor::v3::Decompressor const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::decompressor::v3::Decompressor const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: envoy::extensions::filters::http::dynamic_forward_proxy::v3::PerRouteConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::dynamic_forward_proxy::v3::PerRouteConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::dynamic_forward_proxy::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::dynamic_forward_proxy::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::clusters::dynamic_forward_proxy::v3::ClusterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::clusters::dynamic_forward_proxy::v3::ClusterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::ext_authz::v3::ExtAuthzPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ext_authz::v3::ExtAuthzPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::ext_authz::v3::ExtAuthz const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ext_authz::v3::ExtAuthz const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::fault::v3::HTTPFault const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::fault::v3::HTTPFault const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
8
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
8
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
8
    validate(typed_config, validation_visitor);
372
8
    return typed_config;
373
8
  }
envoy::extensions::filters::http::file_system_buffer::v3::FileSystemBufferFilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::file_system_buffer::v3::FileSystemBufferFilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
13
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
13
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
13
    validate(typed_config, validation_visitor);
372
13
    return typed_config;
373
13
  }
Unexecuted instantiation: envoy::extensions::filters::http::gcp_authn::v3::GcpAuthnFilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::gcp_authn::v3::GcpAuthnFilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::geoip::v3::Geoip const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::geoip::v3::Geoip const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::grpc_field_extraction::v3::GrpcFieldExtractionConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_field_extraction::v3::GrpcFieldExtractionConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::grpc_http1_bridge::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_http1_bridge::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfigPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfigPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_http1_reverse_bridge::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
2
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
2
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
2
    validate(typed_config, validation_visitor);
372
2
    return typed_config;
373
2
  }
envoy::extensions::filters::http::grpc_json_transcoder::v3::GrpcJsonTranscoder const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_json_transcoder::v3::GrpcJsonTranscoder const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
63
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
63
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
63
    validate(typed_config, validation_visitor);
372
63
    return typed_config;
373
63
  }
envoy::extensions::filters::http::grpc_stats::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_stats::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
20
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
20
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
20
    validate(typed_config, validation_visitor);
372
20
    return typed_config;
373
20
  }
Unexecuted instantiation: envoy::extensions::filters::http::grpc_web::v3::GrpcWeb const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::grpc_web::v3::GrpcWeb const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::header_to_metadata::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::header_to_metadata::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
10
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
10
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
10
    validate(typed_config, validation_visitor);
372
10
    return typed_config;
373
10
  }
envoy::extensions::filters::http::health_check::v3::HealthCheck const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::health_check::v3::HealthCheck const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
envoy::extensions::filters::http::ip_tagging::v3::IPTagging const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ip_tagging::v3::IPTagging const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6
    validate(typed_config, validation_visitor);
372
6
    return typed_config;
373
6
  }
envoy::extensions::filters::http::json_to_metadata::v3::JsonToMetadata const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::json_to_metadata::v3::JsonToMetadata const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: envoy::extensions::filters::http::jwt_authn::v3::PerRouteConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::jwt_authn::v3::PerRouteConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::jwt_authn::v3::JwtAuthentication const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::jwt_authn::v3::JwtAuthentication const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
151
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
151
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
151
    validate(typed_config, validation_visitor);
372
151
    return typed_config;
373
151
  }
Unexecuted instantiation: envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaOverride const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaOverride const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaFilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaFilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
4
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
4
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
4
    validate(typed_config, validation_visitor);
372
4
    return typed_config;
373
4
  }
Unexecuted instantiation: envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaBucketSettings const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::rate_limit_quota::v3::RateLimitQuotaBucketSettings const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::local_ratelimit::v3::LocalRateLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::local_ratelimit::v3::LocalRateLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: envoy::extensions::filters::http::lua::v3::LuaPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::lua::v3::LuaPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::lua::v3::Lua const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::lua::v3::Lua const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
26
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
26
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
26
    validate(typed_config, validation_visitor);
372
26
    return typed_config;
373
26
  }
Unexecuted instantiation: envoy::extensions::filters::http::oauth2::v3::OAuth2 const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::oauth2::v3::OAuth2 const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::on_demand::v3::PerRouteConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::on_demand::v3::PerRouteConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::on_demand::v3::OnDemand const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::on_demand::v3::OnDemand const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
2
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
2
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
2
    validate(typed_config, validation_visitor);
372
2
    return typed_config;
373
2
  }
Unexecuted instantiation: envoy::extensions::filters::http::original_src::v3::OriginalSrc const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::original_src::v3::OriginalSrc const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::proto_message_extraction::v3::ProtoMessageExtractionConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::proto_message_extraction::v3::ProtoMessageExtractionConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::ratelimit::v3::RateLimitPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ratelimit::v3::RateLimitPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::ratelimit::v3::RateLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::ratelimit::v3::RateLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
3
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
3
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
3
    validate(typed_config, validation_visitor);
372
3
    return typed_config;
373
3
  }
Unexecuted instantiation: envoy::extensions::filters::http::rbac::v3::RBACPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::rbac::v3::RBACPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::rbac::v3::RBAC const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::rbac::v3::RBAC const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
428
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
428
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
428
    validate(typed_config, validation_visitor);
372
428
    return typed_config;
373
428
  }
Unexecuted instantiation: envoy::extensions::filters::http::set_filter_state::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::set_filter_state::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::set_metadata::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::set_metadata::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6
    validate(typed_config, validation_visitor);
372
6
    return typed_config;
373
6
  }
envoy::extensions::filters::http::tap::v3::Tap const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::tap::v3::Tap const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
82
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
82
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
82
    validate(typed_config, validation_visitor);
372
82
    return typed_config;
373
82
  }
envoy::extensions::filters::http::thrift_to_metadata::v3::ThriftToMetadata const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::thrift_to_metadata::v3::ThriftToMetadata const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
4
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
4
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
4
    validate(typed_config, validation_visitor);
372
4
    return typed_config;
373
4
  }
envoy::extensions::filters::http::wasm::v3::Wasm const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::wasm::v3::Wasm const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
16
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
16
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
16
    validate(typed_config, validation_visitor);
372
16
    return typed_config;
373
16
  }
Unexecuted instantiation: envoy::extensions::filters::http::wasm::v3::Wasm const&& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::wasm::v3::Wasm const&&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::stateful_session::v3::StatefulSessionPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::stateful_session::v3::StatefulSessionPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::stateful_session::v3::StatefulSession const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::stateful_session::v3::StatefulSession const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::http::header_mutation::v3::HeaderMutationPerRoute const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::header_mutation::v3::HeaderMutationPerRoute const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::http::header_mutation::v3::HeaderMutation const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::http::header_mutation::v3::HeaderMutation const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
6
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
6
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
6
    validate(typed_config, validation_visitor);
372
6
    return typed_config;
373
6
  }
Unexecuted instantiation: envoy::extensions::filters::listener::local_ratelimit::v3::LocalRateLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::listener::local_ratelimit::v3::LocalRateLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::listener::original_src::v3::OriginalSrc const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::listener::original_src::v3::OriginalSrc const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::listener::proxy_protocol::v3::ProxyProtocol const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::listener::proxy_protocol::v3::ProxyProtocol const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
60
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
60
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
60
    validate(typed_config, validation_visitor);
372
60
    return typed_config;
373
60
  }
Unexecuted instantiation: envoy::extensions::filters::listener::tls_inspector::v3::TlsInspector const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::listener::tls_inspector::v3::TlsInspector const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::connection_limit::v3::ConnectionLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::direct_response::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::direct_response::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::dubbo_proxy::v3::DubboProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::dubbo_proxy::v3::DubboProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::dubbo_proxy::router::v3::Router const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::dubbo_proxy::router::v3::Router const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::echo::v3::Echo const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::echo::v3::Echo const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::network::ext_authz::v3::ExtAuthz const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::ext_authz::v3::ExtAuthz const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
8
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
8
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
8
    validate(typed_config, validation_visitor);
372
8
    return typed_config;
373
8
  }
envoy::extensions::filters::network::local_ratelimit::v3::LocalRateLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::local_ratelimit::v3::LocalRateLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
3
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
3
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
3
    validate(typed_config, validation_visitor);
372
3
    return typed_config;
373
3
  }
envoy::extensions::filters::network::mongo_proxy::v3::MongoProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::mongo_proxy::v3::MongoProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1.89k
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1.89k
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1.89k
    validate(typed_config, validation_visitor);
372
1.89k
    return typed_config;
373
1.89k
  }
envoy::extensions::filters::network::ratelimit::v3::RateLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::ratelimit::v3::RateLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
4
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
4
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
4
    validate(typed_config, validation_visitor);
372
4
    return typed_config;
373
4
  }
envoy::extensions::filters::network::rbac::v3::RBAC const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::rbac::v3::RBAC const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
647
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
647
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
647
    validate(typed_config, validation_visitor);
372
647
    return typed_config;
373
647
  }
Unexecuted instantiation: envoy::extensions::filters::network::tcp_proxy::v3::TcpProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::tcp_proxy::v3::TcpProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::thrift_proxy::router::v3::Router const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::thrift_proxy::router::v3::Router const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::set_filter_state::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::set_filter_state::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::sni_dynamic_forward_proxy::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::sni_dynamic_forward_proxy::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::wasm::v3::Wasm const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::wasm::v3::Wasm const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::network::zookeeper_proxy::v3::ZooKeeperProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::zookeeper_proxy::v3::ZooKeeperProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
831
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
831
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
831
    validate(typed_config, validation_visitor);
372
831
    return typed_config;
373
831
  }
Unexecuted instantiation: envoy::extensions::filters::network::generic_proxy::v3::GenericProxy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::generic_proxy::v3::GenericProxy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::generic_proxy::action::v3::RouteAction const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::generic_proxy::action::v3::RouteAction const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::generic_proxy::matcher::v3::PropertyMatchInput const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::generic_proxy::matcher::v3::PropertyMatchInput const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::generic_proxy::matcher::v3::RequestMatcher const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::generic_proxy::matcher::v3::RequestMatcher const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::udp::dns_filter::v3::DnsFilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::udp::dns_filter::v3::DnsFilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::udp::udp_proxy::v3::Route const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::udp::udp_proxy::v3::Route const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::udp::udp_proxy::session::http_capsule::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::udp::udp_proxy::session::http_capsule::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::udp::udp_proxy::session::dynamic_forward_proxy::v3::FilterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::udp::udp_proxy::session::dynamic_forward_proxy::v3::FilterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::resource_monitors::fixed_heap::v3::FixedHeapConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::resource_monitors::fixed_heap::v3::FixedHeapConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::resource_monitors::injected_resource::v3::InjectedResourceConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::resource_monitors::injected_resource::v3::InjectedResourceConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::resource_monitors::downstream_connections::v3::DownstreamConnectionsConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::resource_monitors::downstream_connections::v3::DownstreamConnectionsConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::resource_monitors::cpu_utilization::v3::CpuUtilizationConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::resource_monitors::cpu_utilization::v3::CpuUtilizationConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::metrics::v3::DogStatsdSink const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::metrics::v3::DogStatsdSink const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::stat_sinks::graphite_statsd::v3::GraphiteStatsdSink const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::stat_sinks::graphite_statsd::v3::GraphiteStatsdSink const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::metrics::v3::HystrixSink const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::metrics::v3::HystrixSink const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::metrics::v3::MetricsServiceConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::metrics::v3::MetricsServiceConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::stat_sinks::open_telemetry::v3::SinkConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::stat_sinks::open_telemetry::v3::SinkConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::metrics::v3::StatsdSink const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::metrics::v3::StatsdSink const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::stat_sinks::wasm::v3::Wasm const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::stat_sinks::wasm::v3::Wasm const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::thrift_proxy::filters::header_to_metadata::v3::HeaderToMetadata const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::thrift_proxy::filters::header_to_metadata::v3::HeaderToMetadata const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::thrift_proxy::filters::payload_to_metadata::v3::PayloadToMetadata const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::thrift_proxy::filters::payload_to_metadata::v3::PayloadToMetadata const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::thrift_proxy::filters::ratelimit::v3::RateLimit const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::thrift_proxy::filters::ratelimit::v3::RateLimit const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::trace::v3::DatadogConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::trace::v3::DatadogConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::trace::v3::ZipkinConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::trace::v3::ZipkinConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::trace::v3::OpenCensusConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::trace::v3::OpenCensusConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::trace::v3::XRayConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::trace::v3::XRayConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::trace::v3::SkyWalkingConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::trace::v3::SkyWalkingConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::trace::v3::OpenTelemetryConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::trace::v3::OpenTelemetryConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::tracers::opentelemetry::resource_detectors::v3::EnvironmentResourceDetectorConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::tracers::opentelemetry::resource_detectors::v3::EnvironmentResourceDetectorConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::tracers::opentelemetry::resource_detectors::v3::DynatraceResourceDetectorConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::tracers::opentelemetry::resource_detectors::v3::DynatraceResourceDetectorConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::tracers::opentelemetry::resource_detectors::v3::StaticConfigResourceDetectorConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::tracers::opentelemetry::resource_detectors::v3::StaticConfigResourceDetectorConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::tracers::opentelemetry::samplers::v3::DynatraceSamplerConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::tracers::opentelemetry::samplers::v3::DynatraceSamplerConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::alts::v3::Alts const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::alts::v3::Alts const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::http_11_proxy::v3::Http11ProxyUpstreamTransport const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::http_11_proxy::v3::Http11ProxyUpstreamTransport const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::proxy_protocol::v3::ProxyProtocolUpstreamTransport const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::proxy_protocol::v3::ProxyProtocolUpstreamTransport const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::tap::v3::Tap const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::tap::v3::Tap const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::starttls::v3::StartTlsConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::starttls::v3::StartTlsConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::starttls::v3::UpstreamStartTlsConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::starttls::v3::UpstreamStartTlsConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::tcp_stats::v3::Config const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::tcp_stats::v3::Config const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::transport_sockets::internal_upstream::v3::InternalUpstreamTransport const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::transport_sockets::internal_upstream::v3::InternalUpstreamTransport const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::retry::host::omit_host_metadata::v3::OmitHostMetadataConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::retry::host::omit_host_metadata::v3::OmitHostMetadataConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::retry::priority::previous_priorities::v3::PreviousPrioritiesConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::retry::priority::previous_priorities::v3::PreviousPrioritiesConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::internal_redirect::allow_listed_routes::v3::AllowListedRoutesConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::internal_redirect::allow_listed_routes::v3::AllowListedRoutesConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::rate_limit_descriptors::expr::v3::Descriptor const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::rate_limit_descriptors::expr::v3::Descriptor const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::bootstrap::internal_listener::v3::InternalListener const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::bootstrap::internal_listener::v3::InternalListener const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::header_formatters::preserve_case::v3::PreserveCaseFormatterConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::header_formatters::preserve_case::v3::PreserveCaseFormatterConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::original_ip_detection::custom_header::v3::CustomHeaderConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::original_ip_detection::custom_header::v3::CustomHeaderConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::stateful_session::cookie::v3::CookieBasedSessionState const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::stateful_session::cookie::v3::CookieBasedSessionState const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::stateful_session::header::v3::HeaderBasedSessionState const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::stateful_session::header::v3::HeaderBasedSessionState const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::custom_response::redirect_policy::v3::RedirectPolicy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::custom_response::redirect_policy::v3::RedirectPolicy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::custom_response::local_response_policy::v3::LocalResponsePolicy const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::custom_response::local_response_policy::v3::LocalResponsePolicy const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::injected_credentials::generic::v3::Generic const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::injected_credentials::generic::v3::Generic const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::injected_credentials::oauth2::v3::OAuth2 const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::injected_credentials::oauth2::v3::OAuth2 const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::quic::server_preferred_address::v3::FixedServerPreferredAddressConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::quic::server_preferred_address::v3::DataSourceServerPreferredAddressConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::quic::server_preferred_address::v3::DataSourceServerPreferredAddressConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::common::key_value::v3::KeyValueStoreConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::common::key_value::v3::KeyValueStoreConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::config::core::v3::TypedExtensionConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::core::v3::TypedExtensionConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::config::rbac::v3::Action const& const& Envoy::MessageUtil::downcastAndValidate<envoy::config::rbac::v3::Action const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
369
1
                      ProtobufMessage::ValidationVisitor& validation_visitor) {
370
1
    const auto& typed_config = dynamic_cast<MessageType>(config);
371
1
    validate(typed_config, validation_visitor);
372
1
    return typed_config;
373
1
  }
Unexecuted instantiation: xds::type::matcher::v3::IPMatcher const& const& Envoy::MessageUtil::downcastAndValidate<xds::type::matcher::v3::IPMatcher const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::http::early_header_mutation::header_mutation::v3::HeaderMutation const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::http::early_header_mutation::header_mutation::v3::HeaderMutation const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::geoip_providers::maxmind::v3::MaxMindConfig const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::geoip_providers::maxmind::v3::MaxMindConfig const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::filters::network::generic_proxy::router::v3::Router const& const& Envoy::MessageUtil::downcastAndValidate<envoy::extensions::filters::network::generic_proxy::router::v3::Router const&>(google::protobuf::Message const&, Envoy::ProtobufMessage::ValidationVisitor&)
374
375
  /**
376
   * Convert from a typed message into a google.protobuf.Any. This should be used
377
   * instead of the inbuilt PackTo, as PackTo is not available with lite protos.
378
   *
379
   * @param any_message destination google.protobuf.Any.
380
   * @param message source to pack from.
381
   *
382
   * @throw EnvoyException if the message does not unpack.
383
   */
384
  static void packFrom(ProtobufWkt::Any& any_message, const Protobuf::Message& message);
385
386
  /**
387
   * Convert from google.protobuf.Any to a typed message. This should be used
388
   * instead of the inbuilt UnpackTo as it performs validation of results.
389
   *
390
   * @param any_message source google.protobuf.Any message.
391
   * @param message destination to unpack to.
392
   *
393
   * @throw EnvoyException if the message does not unpack.
394
   */
395
  static void unpackToOrThrow(const ProtobufWkt::Any& any_message, Protobuf::Message& message);
396
397
  /**
398
   * Convert from google.protobuf.Any to a typed message. This should be used
399
   * instead of the inbuilt UnpackTo as it performs validation of results.
400
   *
401
   * @param any_message source google.protobuf.Any message.
402
   * @param message destination to unpack to.
403
   *
404
   * @return absl::Status
405
   */
406
  static absl::Status unpackTo(const ProtobufWkt::Any& any_message, Protobuf::Message& message);
407
408
  /**
409
   * Convert from google.protobuf.Any to bytes as std::string
410
   * @param any source google.protobuf.Any message.
411
   *
412
   * @return std::string consists of bytes in the input message.
413
   */
414
28
  static std::string anyToBytes(const ProtobufWkt::Any& any) {
415
28
    if (any.Is<ProtobufWkt::StringValue>()) {
416
0
      ProtobufWkt::StringValue s;
417
0
      MessageUtil::unpackToOrThrow(any, s);
418
0
      return s.value();
419
0
    }
420
28
    if (any.Is<ProtobufWkt::BytesValue>()) {
421
0
      Protobuf::BytesValue b;
422
0
      MessageUtil::unpackToOrThrow(any, b);
423
0
      return b.value();
424
0
    }
425
28
    return any.value();
426
28
  };
427
428
  /**
429
   * Convert from google.protobuf.Any to a typed message.
430
   * @param message source google.protobuf.Any message.
431
   *
432
   * @return MessageType the typed message inside the Any.
433
   */
434
  template <class MessageType>
435
8.05k
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
8.05k
    unpackToOrThrow(message, typed_message);
437
8.05k
  };
void Envoy::MessageUtil::anyConvert<envoy::config::cluster::v3::Cluster>(google::protobuf::Any const&, envoy::config::cluster::v3::Cluster&)
Line
Count
Source
435
14
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
14
    unpackToOrThrow(message, typed_message);
437
14
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::transport_sockets::tls::v3::Secret>(google::protobuf::Any const&, envoy::extensions::transport_sockets::tls::v3::Secret&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::config::core::v3::TypedExtensionConfig>(google::protobuf::Any const&, envoy::config::core::v3::TypedExtensionConfig&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::service::runtime::v3::Runtime>(google::protobuf::Any const&, envoy::service::runtime::v3::Runtime&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::config::route::v3::ScopedRouteConfiguration>(google::protobuf::Any const&, envoy::config::route::v3::ScopedRouteConfiguration&)
void Envoy::MessageUtil::anyConvert<envoy::config::route::v3::RouteConfiguration>(google::protobuf::Any const&, envoy::config::route::v3::RouteConfiguration&)
Line
Count
Source
435
80
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
80
    unpackToOrThrow(message, typed_message);
437
80
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::config::route::v3::VirtualHost>(google::protobuf::Any const&, envoy::config::route::v3::VirtualHost&)
void Envoy::MessageUtil::anyConvert<envoy::config::endpoint::v3::ClusterLoadAssignment>(google::protobuf::Any const&, envoy::config::endpoint::v3::ClusterLoadAssignment&)
Line
Count
Source
435
14
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
14
    unpackToOrThrow(message, typed_message);
437
14
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::config::endpoint::v3::LbEndpoint>(google::protobuf::Any const&, envoy::config::endpoint::v3::LbEndpoint&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::config::common::key_value::v3::KeyValueStoreConfig>(google::protobuf::Any const&, envoy::config::common::key_value::v3::KeyValueStoreConfig&)
void Envoy::MessageUtil::anyConvert<envoy::config::listener::v3::Listener>(google::protobuf::Any const&, envoy::config::listener::v3::Listener&)
Line
Count
Source
435
2.13k
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
2.13k
    unpackToOrThrow(message, typed_message);
437
2.13k
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager>(google::protobuf::Any const&, envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager&)
void Envoy::MessageUtil::anyConvert<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager>(google::protobuf::Any const&, envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager&)
Line
Count
Source
435
5.03k
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
5.03k
    unpackToOrThrow(message, typed_message);
437
5.03k
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::config::overload::v3::ScaleTimersOverloadActionConfig>(google::protobuf::Any const&, envoy::config::overload::v3::ScaleTimersOverloadActionConfig&)
void Envoy::MessageUtil::anyConvert<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>(google::protobuf::Any const&, envoy::extensions::upstreams::http::v3::HttpProtocolOptions&)
Line
Count
Source
435
780
  static inline void anyConvert(const ProtobufWkt::Any& message, MessageType& typed_message) {
436
780
    unpackToOrThrow(message, typed_message);
437
780
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig>(google::protobuf::Any const&, envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator>(google::protobuf::Any const&, envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink>(google::protobuf::Any const&, envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::filters::network::dubbo_proxy::v3::MultipleRouteConfiguration>(google::protobuf::Any const&, envoy::extensions::filters::network::dubbo_proxy::v3::MultipleRouteConfiguration&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::filters::network::thrift_proxy::v3::RouteConfiguration>(google::protobuf::Any const&, envoy::extensions::filters::network::thrift_proxy::v3::RouteConfiguration&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::filters::network::generic_proxy::v3::RouteConfiguration>(google::protobuf::Any const&, envoy::extensions::filters::network::generic_proxy::v3::RouteConfiguration&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig>(google::protobuf::Any const&, envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvert<envoy::extensions::rbac::matchers::upstream_ip_port::v3::UpstreamIpPortMatcher>(google::protobuf::Any const&, envoy::extensions::rbac::matchers::upstream_ip_port::v3::UpstreamIpPortMatcher&)
438
439
  template <class MessageType>
440
5.80k
  static inline MessageType anyConvert(const ProtobufWkt::Any& message) {
441
5.80k
    MessageType typed_message;
442
5.80k
    anyConvert(message, typed_message);
443
5.80k
    return typed_message;
444
5.80k
  };
envoy::extensions::upstreams::http::v3::HttpProtocolOptions Envoy::MessageUtil::anyConvert<envoy::extensions::upstreams::http::v3::HttpProtocolOptions>(google::protobuf::Any const&)
Line
Count
Source
440
780
  static inline MessageType anyConvert(const ProtobufWkt::Any& message) {
441
780
    MessageType typed_message;
442
780
    anyConvert(message, typed_message);
443
780
    return typed_message;
444
780
  };
envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager Envoy::MessageUtil::anyConvert<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager>(google::protobuf::Any const&)
Line
Count
Source
440
5.02k
  static inline MessageType anyConvert(const ProtobufWkt::Any& message) {
441
5.02k
    MessageType typed_message;
442
5.02k
    anyConvert(message, typed_message);
443
5.02k
    return typed_message;
444
5.02k
  };
Unexecuted instantiation: envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig Envoy::MessageUtil::anyConvert<envoy::extensions::filters::udp::udp_proxy::v3::UdpProxyConfig>(google::protobuf::Any const&)
Unexecuted instantiation: envoy::extensions::rbac::matchers::upstream_ip_port::v3::UpstreamIpPortMatcher Envoy::MessageUtil::anyConvert<envoy::extensions::rbac::matchers::upstream_ip_port::v3::UpstreamIpPortMatcher>(google::protobuf::Any const&)
445
446
  /**
447
   * Convert and validate from google.protobuf.Any to a typed message.
448
   * @param message source google.protobuf.Any message.
449
   *
450
   * @return MessageType the typed message inside the Any.
451
   * @throw EnvoyException if the message does not satisfy its type constraints.
452
   */
453
  template <class MessageType>
454
  static inline void anyConvertAndValidate(const ProtobufWkt::Any& message,
455
                                           MessageType& typed_message,
456
2.24k
                                           ProtobufMessage::ValidationVisitor& validation_visitor) {
457
2.24k
    anyConvert<MessageType>(message, typed_message);
458
2.24k
    validate(typed_message, validation_visitor);
459
2.24k
  };
void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::cluster::v3::Cluster>(google::protobuf::Any const&, envoy::config::cluster::v3::Cluster&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
456
14
                                           ProtobufMessage::ValidationVisitor& validation_visitor) {
457
14
    anyConvert<MessageType>(message, typed_message);
458
14
    validate(typed_message, validation_visitor);
459
14
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::transport_sockets::tls::v3::Secret>(google::protobuf::Any const&, envoy::extensions::transport_sockets::tls::v3::Secret&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::core::v3::TypedExtensionConfig>(google::protobuf::Any const&, envoy::config::core::v3::TypedExtensionConfig&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::service::runtime::v3::Runtime>(google::protobuf::Any const&, envoy::service::runtime::v3::Runtime&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::route::v3::ScopedRouteConfiguration>(google::protobuf::Any const&, envoy::config::route::v3::ScopedRouteConfiguration&, Envoy::ProtobufMessage::ValidationVisitor&)
void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::route::v3::RouteConfiguration>(google::protobuf::Any const&, envoy::config::route::v3::RouteConfiguration&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
456
80
                                           ProtobufMessage::ValidationVisitor& validation_visitor) {
457
80
    anyConvert<MessageType>(message, typed_message);
458
80
    validate(typed_message, validation_visitor);
459
80
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::route::v3::VirtualHost>(google::protobuf::Any const&, envoy::config::route::v3::VirtualHost&, Envoy::ProtobufMessage::ValidationVisitor&)
void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::endpoint::v3::ClusterLoadAssignment>(google::protobuf::Any const&, envoy::config::endpoint::v3::ClusterLoadAssignment&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
456
14
                                           ProtobufMessage::ValidationVisitor& validation_visitor) {
457
14
    anyConvert<MessageType>(message, typed_message);
458
14
    validate(typed_message, validation_visitor);
459
14
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::endpoint::v3::LbEndpoint>(google::protobuf::Any const&, envoy::config::endpoint::v3::LbEndpoint&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::common::key_value::v3::KeyValueStoreConfig>(google::protobuf::Any const&, envoy::config::common::key_value::v3::KeyValueStoreConfig&, Envoy::ProtobufMessage::ValidationVisitor&)
void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::listener::v3::Listener>(google::protobuf::Any const&, envoy::config::listener::v3::Listener&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
456
2.13k
                                           ProtobufMessage::ValidationVisitor& validation_visitor) {
457
2.13k
    anyConvert<MessageType>(message, typed_message);
458
2.13k
    validate(typed_message, validation_visitor);
459
2.13k
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager>(google::protobuf::Any const&, envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager&, Envoy::ProtobufMessage::ValidationVisitor&)
void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager>(google::protobuf::Any const&, envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
456
11
                                           ProtobufMessage::ValidationVisitor& validation_visitor) {
457
11
    anyConvert<MessageType>(message, typed_message);
458
11
    validate(typed_message, validation_visitor);
459
11
  };
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::config::overload::v3::ScaleTimersOverloadActionConfig>(google::protobuf::Any const&, envoy::config::overload::v3::ScaleTimersOverloadActionConfig&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator>(google::protobuf::Any const&, envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink>(google::protobuf::Any const&, envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::dubbo_proxy::v3::MultipleRouteConfiguration>(google::protobuf::Any const&, envoy::extensions::filters::network::dubbo_proxy::v3::MultipleRouteConfiguration&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::thrift_proxy::v3::RouteConfiguration>(google::protobuf::Any const&, envoy::extensions::filters::network::thrift_proxy::v3::RouteConfiguration&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::generic_proxy::v3::RouteConfiguration>(google::protobuf::Any const&, envoy::extensions::filters::network::generic_proxy::v3::RouteConfiguration&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: void Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig>(google::protobuf::Any const&, envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig&, Envoy::ProtobufMessage::ValidationVisitor&)
460
461
  template <class MessageType>
462
  static inline MessageType
463
  anyConvertAndValidate(const ProtobufWkt::Any& message,
464
11
                        ProtobufMessage::ValidationVisitor& validation_visitor) {
465
11
    MessageType typed_message;
466
11
    anyConvertAndValidate<MessageType>(message, typed_message, validation_visitor);
467
11
    return typed_message;
468
11
  };
Unexecuted instantiation: envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::http_connection_manager::v3::EnvoyMobileHttpConnectionManager>(google::protobuf::Any const&, Envoy::ProtobufMessage::ValidationVisitor&)
envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::filters::network::http_connection_manager::v3::HttpConnectionManager>(google::protobuf::Any const&, Envoy::ProtobufMessage::ValidationVisitor&)
Line
Count
Source
464
11
                        ProtobufMessage::ValidationVisitor& validation_visitor) {
465
11
    MessageType typed_message;
466
11
    anyConvertAndValidate<MessageType>(message, typed_message, validation_visitor);
467
11
    return typed_message;
468
11
  };
Unexecuted instantiation: envoy::config::overload::v3::ScaleTimersOverloadActionConfig Envoy::MessageUtil::anyConvertAndValidate<envoy::config::overload::v3::ScaleTimersOverloadActionConfig>(google::protobuf::Any const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::config::validators::minimum_clusters::v3::MinimumClustersValidator>(google::protobuf::Any const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::health_check::event_sinks::file::v3::HealthCheckEventFileSink>(google::protobuf::Any const&, Envoy::ProtobufMessage::ValidationVisitor&)
Unexecuted instantiation: envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig Envoy::MessageUtil::anyConvertAndValidate<envoy::extensions::key_value::file_based::v3::FileBasedKeyValueStoreConfig>(google::protobuf::Any const&, Envoy::ProtobufMessage::ValidationVisitor&)
469
470
  /**
471
   * Obtain a string field from a protobuf message dynamically.
472
   *
473
   * @param message message to extract from.
474
   * @param field_name field name.
475
   *
476
   * @return std::string with field value.
477
   */
478
  static inline std::string getStringField(const Protobuf::Message& message,
479
2.50k
                                           const std::string& field_name) {
480
2.50k
    Protobuf::ReflectableMessage reflectable_message = createReflectableMessage(message);
481
2.50k
    const Protobuf::Descriptor* descriptor = reflectable_message->GetDescriptor();
482
2.50k
    const Protobuf::FieldDescriptor* name_field = descriptor->FindFieldByName(field_name);
483
2.50k
    const Protobuf::Reflection* reflection = reflectable_message->GetReflection();
484
2.50k
    return reflection->GetString(*reflectable_message, name_field);
485
0
    return name_field->name();
486
2.50k
  }
487
488
#ifdef ENVOY_ENABLE_YAML
489
  /**
490
   * Convert between two protobufs via a JSON round-trip. This is used to translate arbitrary
491
   * messages to/from google.protobuf.Struct.
492
   * TODO(htuch): Avoid round-tripping via JSON strings by doing whatever
493
   * Protobuf::util::MessageToJsonString does but generating a google.protobuf.Struct instead.
494
   * @param source message.
495
   * @param dest message.
496
   */
497
  static void jsonConvert(const Protobuf::Message& source, Protobuf::Message& dest);
498
  static void jsonConvert(const Protobuf::Message& source, ProtobufWkt::Struct& dest);
499
  static void jsonConvert(const ProtobufWkt::Struct& source,
500
                          ProtobufMessage::ValidationVisitor& validation_visitor,
501
                          Protobuf::Message& dest);
502
  // Convert a message to a ProtobufWkt::Value, return false upon failure.
503
  static bool jsonConvertValue(const Protobuf::Message& source, ProtobufWkt::Value& dest);
504
505
  /**
506
   * Extract YAML as string from a google.protobuf.Message.
507
   * @param message message of type type.googleapis.com/google.protobuf.Message.
508
   * @param block_print whether the returned JSON should be in block style rather than flow style.
509
   * @param always_print_primitive_fields whether to include primitive fields set to their default
510
   * values, e.g. an int32 set to 0 or a bool set to false.
511
   * @return std::string of formatted YAML object.
512
   */
513
  static std::string getYamlStringFromMessage(const Protobuf::Message& message,
514
                                              const bool block_print = true,
515
                                              const bool always_print_primitive_fields = false);
516
517
  /**
518
   * Extract JSON as string from a google.protobuf.Message. Returns an error if the message cannot
519
   * be represented as JSON, which can occur if it contains an Any proto with an unrecognized type
520
   * URL or invalid data, or if memory cannot be allocated.
521
   * @param message message of type type.googleapis.com/google.protobuf.Message.
522
   * @param pretty_print whether the returned JSON should be formatted.
523
   * @param always_print_primitive_fields whether to include primitive fields set to their default
524
   * values, e.g. an int32 set to 0 or a bool set to false.
525
   * @return ProtobufUtil::StatusOr<std::string> of formatted JSON object, or an error status if
526
   * conversion fails.
527
   */
528
  static absl::StatusOr<std::string>
529
  getJsonStringFromMessage(const Protobuf::Message& message, bool pretty_print = false,
530
                           bool always_print_primitive_fields = false);
531
532
  /**
533
   * Extract JSON as string from a google.protobuf.Message, returning some error string if the
534
   * conversion to JSON fails.
535
   * @param message message of type type.googleapis.com/google.protobuf.Message.
536
   * @param pretty_print whether the returned JSON should be formatted.
537
   * @param always_print_primitive_fields whether to include primitive fields set to their default
538
   * values, e.g. an int32 set to 0 or a bool set to false.
539
   * @return std::string of formatted JSON object, or an error message if conversion fails.
540
   */
541
  static std::string getJsonStringFromMessageOrError(const Protobuf::Message& message,
542
                                                     bool pretty_print = false,
543
                                                     bool always_print_primitive_fields = false);
544
#endif
545
546
  static std::string convertToStringForLogs(const Protobuf::Message& message,
547
                                            bool pretty_print = false,
548
                                            bool always_print_primitive_fields = false);
549
550
  /**
551
   * Utility method to create a Struct containing the passed in key/value strings.
552
   *
553
   * @param key the key to use to set the value
554
   * @param value the string value to associate with the key
555
   */
556
  static ProtobufWkt::Struct keyValueStruct(const std::string& key, const std::string& value);
557
558
  /**
559
   * Utility method to create a Struct containing the passed in key/value map.
560
   *
561
   * @param fields the key/value pairs to initialize the Struct proto
562
   */
563
  static ProtobufWkt::Struct keyValueStruct(const std::map<std::string, std::string>& fields);
564
565
  /**
566
   * Utility method to print a human readable string of the code passed in.
567
   *
568
   * @param code the protobuf error code
569
   */
570
  static std::string codeEnumToString(absl::StatusCode code);
571
572
  /**
573
   * Modifies a message such that all sensitive data (that is, fields annotated as
574
   * `udpa.annotations.sensitive`) is redacted for display. String-typed fields annotated as
575
   * `sensitive` will be replaced with the string "[redacted]", bytes-typed fields will be replaced
576
   * with the bytes `5B72656461637465645D` (the ASCII / UTF-8 encoding of the string "[redacted]"),
577
   * primitive-typed fields (including enums) will be cleared, and message-typed fields will be
578
   * traversed recursively to redact their contents.
579
   *
580
   * LIMITATION: This works properly for strongly-typed messages, as well as for messages packed in
581
   * a `ProtobufWkt::Any` with a `type_url` corresponding to a proto that was compiled into the
582
   * Envoy binary. However it does not work for messages encoded as `ProtobufWkt::Struct`, since
583
   * structs are missing the "sensitive" annotations that this function expects. Similarly, it fails
584
   * for messages encoded as `ProtobufWkt::Any` with a `type_url` that isn't registered with the
585
   * binary. If you're working with struct-typed messages, including those that might be hiding
586
   * within strongly-typed messages, please reify them to strongly-typed messages using
587
   * `MessageUtil::jsonConvert()` before calling `MessageUtil::redact()`.
588
   *
589
   * @param message message to redact.
590
   */
591
  static void redact(Protobuf::Message& message);
592
593
  /**
594
   * Reinterpret a Protobuf message as another Protobuf message by converting to wire format and
595
   * back. This only works for messages that can be effectively duck typed this way, e.g. with a
596
   * subtype relationship modulo field name.
597
   *
598
   * @param src source message.
599
   * @param dst destination message.
600
   * @throw EnvoyException if a conversion error occurs.
601
   */
602
  static void wireCast(const Protobuf::Message& src, Protobuf::Message& dst);
603
604
  /**
605
   * Sanitizes a string to contain only valid UTF-8. Invalid UTF-8 characters will be replaced. If
606
   * the input string is valid UTF-8, it will be returned unmodified.
607
   */
608
  static std::string sanitizeUtf8String(absl::string_view str);
609
610
  /**
611
   * Return text proto representation of the `message`.
612
   * @param message proto to print.
613
   * @return text representation of the proto `message`.
614
   */
615
  static std::string toTextProto(const Protobuf::Message& message);
616
};
617
618
class ValueUtil {
619
public:
620
80.2k
  static std::size_t hash(const ProtobufWkt::Value& value) { return MessageUtil::hash(value); }
621
622
#ifdef ENVOY_ENABLE_YAML
623
  /**
624
   * Load YAML string into ProtobufWkt::Value.
625
   */
626
  static ProtobufWkt::Value loadFromYaml(const std::string& yaml);
627
#endif
628
629
  /**
630
   * Compare two ProtobufWkt::Values for equality.
631
   * @param v1 message of type type.googleapis.com/google.protobuf.Value
632
   * @param v2 message of type type.googleapis.com/google.protobuf.Value
633
   * @return true if v1 and v2 are identical
634
   */
635
  static bool equal(const ProtobufWkt::Value& v1, const ProtobufWkt::Value& v2);
636
637
  /**
638
   * @return wrapped ProtobufWkt::NULL_VALUE.
639
   */
640
  static const ProtobufWkt::Value& nullValue();
641
642
  /**
643
   * Wrap std::string into ProtobufWkt::Value string value.
644
   * @param str string to be wrapped.
645
   * @return wrapped string.
646
   */
647
  static ProtobufWkt::Value stringValue(const std::string& str);
648
649
  /**
650
   * Wrap optional std::string into ProtobufWkt::Value string value.
651
   * If the argument contains a null optional, return ProtobufWkt::NULL_VALUE.
652
   * @param str string to be wrapped.
653
   * @return wrapped string.
654
   */
655
  static ProtobufWkt::Value optionalStringValue(const absl::optional<std::string>& str);
656
657
  /**
658
   * Wrap boolean into ProtobufWkt::Value boolean value.
659
   * @param str boolean to be wrapped.
660
   * @return wrapped boolean.
661
   */
662
  static ProtobufWkt::Value boolValue(bool b);
663
664
  /**
665
   * Wrap ProtobufWkt::Struct into ProtobufWkt::Value struct value.
666
   * @param obj struct to be wrapped.
667
   * @return wrapped struct.
668
   */
669
  static ProtobufWkt::Value structValue(const ProtobufWkt::Struct& obj);
670
671
  /**
672
   * Wrap number into ProtobufWkt::Value double value.
673
   * @param num number to be wrapped.
674
   * @return wrapped number.
675
   */
676
0
  template <typename T> static ProtobufWkt::Value numberValue(const T num) {
677
0
    ProtobufWkt::Value val;
678
0
    val.set_number_value(static_cast<double>(num));
679
0
    return val;
680
0
  }
Unexecuted instantiation: google::protobuf::Value Envoy::ValueUtil::numberValue<unsigned long>(unsigned long)
Unexecuted instantiation: google::protobuf::Value Envoy::ValueUtil::numberValue<long>(long)
Unexecuted instantiation: google::protobuf::Value Envoy::ValueUtil::numberValue<unsigned int>(unsigned int)
Unexecuted instantiation: google::protobuf::Value Envoy::ValueUtil::numberValue<int>(int)
681
682
  /**
683
   * Wrap a collection of ProtobufWkt::Values into ProtobufWkt::Value list value.
684
   * @param values collection of ProtobufWkt::Values to be wrapped.
685
   * @return wrapped list value.
686
   */
687
  static ProtobufWkt::Value listValue(const std::vector<ProtobufWkt::Value>& values);
688
};
689
690
/**
691
 * HashedValue is a wrapper around ProtobufWkt::Value that computes
692
 * and stores a hash code for the Value at construction.
693
 */
694
class HashedValue {
695
public:
696
80.2k
  HashedValue(const ProtobufWkt::Value& value) : value_(value), hash_(ValueUtil::hash(value)){};
697
80.2k
  HashedValue(const HashedValue& v) = default;
698
699
0
  const ProtobufWkt::Value& value() const { return value_; }
700
0
  std::size_t hash() const { return hash_; }
701
702
0
  bool operator==(const HashedValue& rhs) const {
703
0
    return hash_ == rhs.hash_ && ValueUtil::equal(value_, rhs.value_);
704
0
  }
705
706
0
  bool operator!=(const HashedValue& rhs) const { return !(*this == rhs); }
707
708
private:
709
  const ProtobufWkt::Value value_;
710
  const std::size_t hash_;
711
};
712
713
class DurationUtil {
714
public:
715
  /**
716
   * Same as DurationUtil::durationToMilliseconds but with extra validation logic.
717
   * Same as Protobuf::util::TimeUtil::DurationToSeconds but with extra validation logic.
718
   * Specifically, we ensure that the duration is positive.
719
   * @param duration protobuf.
720
   * @return duration in milliseconds.
721
   * @throw EnvoyException when duration is out-of-range.
722
   */
723
  static uint64_t durationToMilliseconds(const ProtobufWkt::Duration& duration);
724
725
  /**
726
   * Same as DurationUtil::durationToMilliseconds but does not throw an exception.
727
   * @param duration protobuf.
728
   * @return duration in milliseconds or an error status.
729
   */
730
  static absl::StatusOr<uint64_t>
731
  durationToMillisecondsNoThrow(const ProtobufWkt::Duration& duration);
732
733
  /**
734
   * Same as Protobuf::util::TimeUtil::DurationToSeconds but with extra validation logic.
735
   * Specifically, we ensure that the duration is positive.
736
   * @param duration protobuf.
737
   * @return duration in seconds.
738
   * @throw EnvoyException when duration is out-of-range.
739
   */
740
  static uint64_t durationToSeconds(const ProtobufWkt::Duration& duration);
741
};
742
743
class TimestampUtil {
744
public:
745
  /**
746
   * Writes a time_point<system_clock> (SystemTime) to a protobuf Timestamp, by way of time_t.
747
   * @param system_clock_time the time to write
748
   * @param timestamp a pointer to the mutable protobuf member to be written into.
749
   */
750
  static void systemClockToTimestamp(const SystemTime system_clock_time,
751
                                     ProtobufWkt::Timestamp& timestamp);
752
};
753
754
class StructUtil {
755
public:
756
  /**
757
   * Recursively updates in-place a protobuf structure with keys from another
758
   * object.
759
   *
760
   * The merging strategy is the following. If a key from \p other does not
761
   * exists, it's just copied into \p obj. If the key exists but has a
762
   * different type, it is replaced by the new value. Otherwise:
763
   * - for scalar values (null, string, number, boolean) are replaced with the new value
764
   * - for lists: new values are added to the current list
765
   * - for structures: recursively apply this scheme
766
   *
767
   * @param obj the object to update in-place
768
   * @param with the object to update \p obj with
769
   */
770
  static void update(ProtobufWkt::Struct& obj, const ProtobufWkt::Struct& with);
771
};
772
773
} // namespace Envoy
774
775
namespace std {
776
// Inject an implementation of std::hash for Envoy::HashedValue into the std namespace.
777
template <> struct hash<Envoy::HashedValue> {
778
0
  std::size_t operator()(Envoy::HashedValue const& v) const { return v.hash(); }
779
};
780
781
} // namespace std