grpc 1.34.0 → 1.35.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +808 -2787
- data/etc/roots.pem +257 -573
- data/include/grpc/compression.h +1 -1
- data/include/grpc/grpc.h +14 -0
- data/include/grpc/grpc_security.h +61 -3
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +1 -1
- data/include/grpc/impl/codegen/log.h +0 -2
- data/include/grpc/impl/codegen/sync_windows.h +4 -0
- data/include/grpc/slice_buffer.h +3 -3
- data/include/grpc/support/sync.h +3 -3
- data/include/grpc/support/time.h +7 -7
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
- data/src/core/ext/filters/client_channel/client_channel.h +0 -4
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
- data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
- data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
- data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
- data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
- data/src/core/ext/filters/client_channel/subchannel.h +12 -18
- data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
- data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
- data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
- data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
- data/src/core/ext/xds/certificate_provider_store.cc +10 -7
- data/src/core/ext/xds/certificate_provider_store.h +12 -7
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
- data/src/core/ext/xds/xds_api.cc +220 -31
- data/src/core/ext/xds/xds_api.h +41 -10
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
- data/src/core/ext/xds/xds_certificate_provider.h +40 -2
- data/src/core/ext/xds/xds_client.cc +31 -29
- data/src/core/ext/xds/xds_client.h +6 -1
- data/src/core/ext/xds/xds_client_stats.cc +2 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
- data/src/core/lib/channel/channel_args.cc +8 -8
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +13 -14
- data/src/core/lib/channel/channelz.h +0 -1
- data/src/core/lib/channel/channelz_registry.h +0 -1
- data/src/core/lib/channel/handshaker.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +3 -2
- data/src/core/lib/debug/stats.h +2 -2
- data/src/core/lib/debug/stats_data.h +13 -13
- data/src/core/lib/gpr/alloc.cc +3 -2
- data/src/core/lib/gpr/log.cc +53 -16
- data/src/core/lib/gpr/log_linux.cc +3 -1
- data/src/core/lib/gpr/log_posix.cc +3 -1
- data/src/core/lib/gpr/log_windows.cc +3 -1
- data/src/core/lib/gpr/spinlock.h +10 -2
- data/src/core/lib/gpr/string.cc +22 -21
- data/src/core/lib/gpr/string.h +5 -6
- data/src/core/lib/gpr/sync.cc +4 -4
- data/src/core/lib/gpr/time.cc +12 -12
- data/src/core/lib/gprpp/arena.h +3 -2
- data/src/core/lib/gprpp/ref_counted.h +2 -2
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
- data/src/core/lib/gprpp/thd_posix.cc +6 -1
- data/src/core/lib/gprpp/thd_windows.cc +3 -1
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +1 -1
- data/src/core/lib/http/parser.cc +1 -2
- data/src/core/lib/iomgr/call_combiner.cc +8 -5
- data/src/core/lib/iomgr/combiner.cc +2 -1
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/error.cc +15 -11
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
- data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
- data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
- data/src/core/lib/iomgr/exec_ctx.h +6 -4
- data/src/core/lib/iomgr/executor.cc +2 -1
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/executor/threadpool.h +1 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/load_file.h +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +19 -14
- data/src/core/lib/iomgr/lockfree_event.h +2 -2
- data/src/core/lib/iomgr/parse_address.cc +52 -46
- data/src/core/lib/iomgr/parse_address.h +13 -9
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
- data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +4 -4
- data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
- data/src/core/lib/iomgr/socket_mutator.cc +3 -2
- data/src/core/lib/iomgr/tcp_client.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
- data/src/core/lib/iomgr/tcp_custom.cc +22 -17
- data/src/core/lib/iomgr/tcp_posix.cc +9 -6
- data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
- data/src/core/lib/iomgr/timer_custom.cc +3 -3
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +1 -2
- data/src/core/lib/iomgr/udp_server.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
- data/src/core/lib/json/json.h +10 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/context/security_context.cc +4 -3
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
- data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +3 -2
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/slice/slice_intern.cc +4 -5
- data/src/core/lib/slice/slice_internal.h +2 -2
- data/src/core/lib/surface/call.cc +32 -24
- data/src/core/lib/surface/call_details.cc +8 -8
- data/src/core/lib/surface/channel.cc +16 -10
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +23 -18
- data/src/core/lib/surface/completion_queue.h +16 -16
- data/src/core/lib/surface/init.cc +6 -5
- data/src/core/lib/surface/lame_client.cc +20 -46
- data/src/core/lib/surface/lame_client.h +4 -0
- data/src/core/lib/surface/server.cc +59 -15
- data/src/core/lib/surface/server.h +37 -5
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/authority_override.cc +6 -4
- data/src/core/lib/transport/authority_override.h +5 -2
- data/src/core/lib/transport/connectivity_state.h +6 -4
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +4 -3
- data/src/core/lib/transport/transport.h +7 -7
- data/src/core/lib/uri/uri_parser.cc +131 -249
- data/src/core/lib/uri/uri_parser.h +57 -21
- data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
- data/src/core/tsi/alts/crypt/gsec.cc +5 -4
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
- data/src/core/tsi/fake_transport_security.cc +5 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +62 -49
- data/src/core/tsi/ssl_transport_security.h +6 -6
- data/src/core/tsi/transport_security.cc +6 -6
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
- data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
- data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
- data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
- data/third_party/upb/upb/decode.c +248 -167
- data/third_party/upb/upb/decode.h +20 -1
- data/third_party/upb/upb/decode.int.h +163 -0
- data/third_party/upb/upb/decode_fast.c +1040 -0
- data/third_party/upb/upb/decode_fast.h +126 -0
- data/third_party/upb/upb/def.c +525 -516
- data/third_party/upb/upb/def.h +16 -31
- data/third_party/upb/upb/def.hpp +37 -123
- data/third_party/upb/upb/encode.c +227 -169
- data/third_party/upb/upb/encode.h +27 -2
- data/third_party/upb/upb/json_decode.c +1443 -0
- data/third_party/upb/upb/json_decode.h +23 -0
- data/third_party/upb/upb/json_encode.c +713 -0
- data/third_party/upb/upb/json_encode.h +36 -0
- data/third_party/upb/upb/msg.c +167 -88
- data/third_party/upb/upb/msg.h +174 -34
- data/third_party/upb/upb/port_def.inc +74 -61
- data/third_party/upb/upb/port_undef.inc +3 -7
- data/third_party/upb/upb/reflection.c +36 -19
- data/third_party/upb/upb/table.c +34 -197
- data/third_party/upb/upb/table.int.h +14 -5
- data/third_party/upb/upb/text_encode.c +45 -22
- data/third_party/upb/upb/text_encode.h +4 -1
- data/third_party/upb/upb/upb.c +18 -41
- data/third_party/upb/upb/upb.h +36 -7
- data/third_party/upb/upb/upb.hpp +4 -4
- data/third_party/upb/upb/upb.int.h +29 -0
- metadata +60 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
- data/src/core/lib/gprpp/map.h +0 -53
- data/third_party/upb/upb/port.c +0 -26
@@ -0,0 +1,145 @@
|
|
1
|
+
/* Copyright 2020 王一 Wang Yi <godspeed_china@yeah.net>
|
2
|
+
This is free and unencumbered software released into the public domain. http://unlicense.org/
|
3
|
+
See github.com/wangyi-fudan/wyhash/ LICENSE
|
4
|
+
*/
|
5
|
+
#ifndef wyhash_final_version
|
6
|
+
#define wyhash_final_version
|
7
|
+
//defines that change behavior
|
8
|
+
#ifndef WYHASH_CONDOM
|
9
|
+
#define WYHASH_CONDOM 1 //0: read 8 bytes before and after boundaries, dangerous but fastest. 1: normal valid behavior 2: extra protection against entropy loss (probability=2^-63), aka. "blind multiplication"
|
10
|
+
#endif
|
11
|
+
#define WYHASH_32BIT_MUM 0 //faster on 32 bit system
|
12
|
+
//includes
|
13
|
+
#include <stdint.h>
|
14
|
+
#include <string.h>
|
15
|
+
#if defined(_MSC_VER) && defined(_M_X64)
|
16
|
+
#include <intrin.h>
|
17
|
+
#pragma intrinsic(_umul128)
|
18
|
+
#endif
|
19
|
+
#if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__)
|
20
|
+
#define _likely_(x) __builtin_expect(x,1)
|
21
|
+
#define _unlikely_(x) __builtin_expect(x,0)
|
22
|
+
#else
|
23
|
+
#define _likely_(x) (x)
|
24
|
+
#define _unlikely_(x) (x)
|
25
|
+
#endif
|
26
|
+
//mum function
|
27
|
+
static inline uint64_t _wyrot(uint64_t x) { return (x>>32)|(x<<32); }
|
28
|
+
static inline void _wymum(uint64_t *A, uint64_t *B){
|
29
|
+
#if(WYHASH_32BIT_MUM)
|
30
|
+
uint64_t hh=(*A>>32)*(*B>>32), hl=(*A>>32)*(unsigned)*B, lh=(unsigned)*A*(*B>>32), ll=(uint64_t)(unsigned)*A*(unsigned)*B;
|
31
|
+
#if(WYHASH_CONDOM>1)
|
32
|
+
*A^=_wyrot(hl)^hh; *B^=_wyrot(lh)^ll;
|
33
|
+
#else
|
34
|
+
*A=_wyrot(hl)^hh; *B=_wyrot(lh)^ll;
|
35
|
+
#endif
|
36
|
+
#elif defined(__SIZEOF_INT128__)
|
37
|
+
__uint128_t r=*A; r*=*B;
|
38
|
+
#if(WYHASH_CONDOM>1)
|
39
|
+
*A^=(uint64_t)r; *B^=(uint64_t)(r>>64);
|
40
|
+
#else
|
41
|
+
*A=(uint64_t)r; *B=(uint64_t)(r>>64);
|
42
|
+
#endif
|
43
|
+
#elif defined(_MSC_VER) && defined(_M_X64)
|
44
|
+
#if(WYHASH_CONDOM>1)
|
45
|
+
uint64_t a, b;
|
46
|
+
a=_umul128(*A,*B,&b);
|
47
|
+
*A^=a; *B^=b;
|
48
|
+
#else
|
49
|
+
*A=_umul128(*A,*B,B);
|
50
|
+
#endif
|
51
|
+
#else
|
52
|
+
uint64_t ha=*A>>32, hb=*B>>32, la=(uint32_t)*A, lb=(uint32_t)*B, hi, lo;
|
53
|
+
uint64_t rh=ha*hb, rm0=ha*lb, rm1=hb*la, rl=la*lb, t=rl+(rm0<<32), c=t<rl;
|
54
|
+
lo=t+(rm1<<32); c+=lo<t; hi=rh+(rm0>>32)+(rm1>>32)+c;
|
55
|
+
#if(WYHASH_CONDOM>1)
|
56
|
+
*A^=lo; *B^=hi;
|
57
|
+
#else
|
58
|
+
*A=lo; *B=hi;
|
59
|
+
#endif
|
60
|
+
#endif
|
61
|
+
}
|
62
|
+
static inline uint64_t _wymix(uint64_t A, uint64_t B){ _wymum(&A,&B); return A^B; }
|
63
|
+
//read functions
|
64
|
+
#ifndef WYHASH_LITTLE_ENDIAN
|
65
|
+
#if defined(_WIN32) || defined(__LITTLE_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
66
|
+
#define WYHASH_LITTLE_ENDIAN 1
|
67
|
+
#elif defined(__BIG_ENDIAN__) || (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
68
|
+
#define WYHASH_LITTLE_ENDIAN 0
|
69
|
+
#endif
|
70
|
+
#endif
|
71
|
+
#if (WYHASH_LITTLE_ENDIAN)
|
72
|
+
static inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return v;}
|
73
|
+
static inline uint64_t _wyr4(const uint8_t *p) { unsigned v; memcpy(&v, p, 4); return v;}
|
74
|
+
#elif defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__)
|
75
|
+
static inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return __builtin_bswap64(v);}
|
76
|
+
static inline uint64_t _wyr4(const uint8_t *p) { unsigned v; memcpy(&v, p, 4); return __builtin_bswap32(v);}
|
77
|
+
#elif defined(_MSC_VER)
|
78
|
+
static inline uint64_t _wyr8(const uint8_t *p) { uint64_t v; memcpy(&v, p, 8); return _byteswap_uint64(v);}
|
79
|
+
static inline uint64_t _wyr4(const uint8_t *p) { unsigned v; memcpy(&v, p, 4); return _byteswap_ulong(v);}
|
80
|
+
#endif
|
81
|
+
static inline uint64_t _wyr3(const uint8_t *p, unsigned k) { return (((uint64_t)p[0])<<16)|(((uint64_t)p[k>>1])<<8)|p[k-1];}
|
82
|
+
//wyhash function
|
83
|
+
static inline uint64_t _wyfinish16(const uint8_t *p, uint64_t len, uint64_t seed, const uint64_t *secret, uint64_t i){
|
84
|
+
#if(WYHASH_CONDOM>0)
|
85
|
+
uint64_t a, b;
|
86
|
+
if(_likely_(i<=8)){
|
87
|
+
if(_likely_(i>=4)){ a=_wyr4(p); b=_wyr4(p+i-4); }
|
88
|
+
else if (_likely_(i)){ a=_wyr3(p,i); b=0; }
|
89
|
+
else a=b=0;
|
90
|
+
}
|
91
|
+
else{ a=_wyr8(p); b=_wyr8(p+i-8); }
|
92
|
+
return _wymix(secret[1]^len,_wymix(a^secret[1], b^seed));
|
93
|
+
#else
|
94
|
+
#define oneshot_shift ((i<8)*((8-i)<<3))
|
95
|
+
return _wymix(secret[1]^len,_wymix((_wyr8(p)<<oneshot_shift)^secret[1],(_wyr8(p+i-8)>>oneshot_shift)^seed));
|
96
|
+
#endif
|
97
|
+
}
|
98
|
+
|
99
|
+
static inline uint64_t _wyfinish(const uint8_t *p, uint64_t len, uint64_t seed, const uint64_t *secret, uint64_t i){
|
100
|
+
if(_likely_(i<=16)) return _wyfinish16(p,len,seed,secret,i);
|
101
|
+
return _wyfinish(p+16,len,_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed),secret,i-16);
|
102
|
+
}
|
103
|
+
|
104
|
+
static inline uint64_t wyhash(const void *key, uint64_t len, uint64_t seed, const uint64_t *secret){
|
105
|
+
const uint8_t *p=(const uint8_t *)key;
|
106
|
+
uint64_t i=len; seed^=*secret;
|
107
|
+
if(_unlikely_(i>64)){
|
108
|
+
uint64_t see1=seed;
|
109
|
+
do{
|
110
|
+
seed=_wymix(_wyr8(p)^secret[1],_wyr8(p+8)^seed)^_wymix(_wyr8(p+16)^secret[2],_wyr8(p+24)^seed);
|
111
|
+
see1=_wymix(_wyr8(p+32)^secret[3],_wyr8(p+40)^see1)^_wymix(_wyr8(p+48)^secret[4],_wyr8(p+56)^see1);
|
112
|
+
p+=64; i-=64;
|
113
|
+
}while(i>64);
|
114
|
+
seed^=see1;
|
115
|
+
}
|
116
|
+
return _wyfinish(p,len,seed,secret,i);
|
117
|
+
}
|
118
|
+
//utility functions
|
119
|
+
const uint64_t _wyp[5] = {0xa0761d6478bd642full, 0xe7037ed1a0b428dbull, 0x8ebc6af09c88c6e3ull, 0x589965cc75374cc3ull, 0x1d8e4e27c47d124full};
|
120
|
+
static inline uint64_t wyhash64(uint64_t A, uint64_t B){ A^=_wyp[0]; B^=_wyp[1]; _wymum(&A,&B); return _wymix(A^_wyp[0],B^_wyp[1]);}
|
121
|
+
static inline uint64_t wyrand(uint64_t *seed){ *seed+=_wyp[0]; return _wymix(*seed,*seed^_wyp[1]);}
|
122
|
+
static inline double wy2u01(uint64_t r){ const double _wynorm=1.0/(1ull<<52); return (r>>12)*_wynorm;}
|
123
|
+
static inline double wy2gau(uint64_t r){ const double _wynorm=1.0/(1ull<<20); return ((r&0x1fffff)+((r>>21)&0x1fffff)+((r>>42)&0x1fffff))*_wynorm-3.0;}
|
124
|
+
static inline uint64_t wy2u0k(uint64_t r, uint64_t k){ _wymum(&r,&k); return k; }
|
125
|
+
|
126
|
+
static inline void make_secret(uint64_t seed, uint64_t *secret){
|
127
|
+
uint8_t c[] = {15, 23, 27, 29, 30, 39, 43, 45, 46, 51, 53, 54, 57, 58, 60, 71, 75, 77, 78, 83, 85, 86, 89, 90, 92, 99, 101, 102, 105, 106, 108, 113, 114, 116, 120, 135, 139, 141, 142, 147, 149, 150, 153, 154, 156, 163, 165, 166, 169, 170, 172, 177, 178, 180, 184, 195, 197, 198, 201, 202, 204, 209, 210, 212, 216, 225, 226, 228, 232, 240 };
|
128
|
+
for(size_t i=0;i<5;i++){
|
129
|
+
uint8_t ok;
|
130
|
+
do{
|
131
|
+
ok=1; secret[i]=0;
|
132
|
+
for(size_t j=0;j<64;j+=8) secret[i]|=((uint64_t)c[wyrand(&seed)%sizeof(c)])<<j;
|
133
|
+
if(secret[i]%2==0){ ok=0; continue; }
|
134
|
+
for(size_t j=0;j<i;j++)
|
135
|
+
#if defined(__GNUC__) || defined(__INTEL_COMPILER) || defined(__clang__)
|
136
|
+
if(__builtin_popcountll(secret[j]^secret[i])!=32){ ok=0; break; }
|
137
|
+
#elif defined(_MSC_VER) && defined(_M_X64)
|
138
|
+
if(_mm_popcnt_u64(secret[j]^secret[i])!=32){ ok=0; break; }
|
139
|
+
#endif
|
140
|
+
if(!ok)continue;
|
141
|
+
for(uint64_t j=3;j<0x100000000ull;j+=2) if(secret[i]%j==0){ ok=0; break; }
|
142
|
+
}while(!ok);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
#endif
|
@@ -1,33 +1,37 @@
|
|
1
1
|
|
2
|
+
#include "upb/decode.h"
|
3
|
+
|
2
4
|
#include <setjmp.h>
|
3
5
|
#include <string.h>
|
4
6
|
|
5
|
-
#include "upb/decode.h"
|
7
|
+
#include "upb/decode.int.h"
|
6
8
|
#include "upb/upb.h"
|
9
|
+
#include "upb/upb.int.h"
|
7
10
|
|
11
|
+
/* Must be last. */
|
8
12
|
#include "upb/port_def.inc"
|
9
13
|
|
10
|
-
/* Maps descriptor type ->
|
11
|
-
static const uint8_t
|
14
|
+
/* Maps descriptor type -> elem_size_lg2. */
|
15
|
+
static const uint8_t desctype_to_elem_size_lg2[] = {
|
12
16
|
-1, /* invalid descriptor type */
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
17
|
+
3, /* DOUBLE */
|
18
|
+
2, /* FLOAT */
|
19
|
+
3, /* INT64 */
|
20
|
+
3, /* UINT64 */
|
21
|
+
2, /* INT32 */
|
22
|
+
3, /* FIXED64 */
|
23
|
+
2, /* FIXED32 */
|
24
|
+
0, /* BOOL */
|
25
|
+
UPB_SIZE(3, 4), /* STRING */
|
26
|
+
UPB_SIZE(2, 3), /* GROUP */
|
27
|
+
UPB_SIZE(2, 3), /* MESSAGE */
|
28
|
+
UPB_SIZE(3, 4), /* BYTES */
|
29
|
+
2, /* UINT32 */
|
30
|
+
2, /* ENUM */
|
31
|
+
2, /* SFIXED32 */
|
32
|
+
3, /* SFIXED64 */
|
33
|
+
2, /* SINT32 */
|
34
|
+
3, /* SINT64 */
|
31
35
|
};
|
32
36
|
|
33
37
|
/* Maps descriptor type -> upb map size. */
|
@@ -134,106 +138,101 @@ static const int8_t delim_ops[37] = {
|
|
134
138
|
OP_VARPCK_LG2(3), /* REPEATED SINT64 */
|
135
139
|
};
|
136
140
|
|
137
|
-
/* Data pertaining to the parse. */
|
138
|
-
typedef struct {
|
139
|
-
const char *limit; /* End of delimited region or end of buffer. */
|
140
|
-
upb_arena *arena;
|
141
|
-
int depth;
|
142
|
-
uint32_t end_group; /* Set to field number of END_GROUP tag, if any. */
|
143
|
-
jmp_buf err;
|
144
|
-
} upb_decstate;
|
145
|
-
|
146
141
|
typedef union {
|
147
142
|
bool bool_val;
|
148
143
|
uint32_t uint32_val;
|
149
144
|
uint64_t uint64_val;
|
150
|
-
|
145
|
+
uint32_t size;
|
151
146
|
} wireval;
|
152
147
|
|
153
148
|
static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
154
149
|
const upb_msglayout *layout);
|
155
150
|
|
156
|
-
UPB_NORETURN static void decode_err(upb_decstate *d) {
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
if (offset == 0 || i + offset > len) {
|
180
|
-
decode_err(d);
|
181
|
-
}
|
182
|
-
for (j = i + 1; j < i + offset; j++) {
|
183
|
-
if ((buf[j] & 0xc0) != 0x80) {
|
184
|
-
decode_err(d);
|
185
|
-
}
|
186
|
-
}
|
187
|
-
i += offset;
|
188
|
-
}
|
189
|
-
if (i != len) decode_err(d);
|
151
|
+
UPB_NORETURN static void decode_err(upb_decstate *d) { UPB_LONGJMP(d->err, 1); }
|
152
|
+
|
153
|
+
const char *fastdecode_err(upb_decstate *d) {
|
154
|
+
longjmp(d->err, 1);
|
155
|
+
return NULL;
|
156
|
+
}
|
157
|
+
|
158
|
+
const uint8_t upb_utf8_offsets[] = {
|
159
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
160
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
161
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
162
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
163
|
+
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
164
|
+
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
165
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
166
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
167
|
+
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
|
168
|
+
2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
|
169
|
+
4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
|
170
|
+
};
|
171
|
+
|
172
|
+
static void decode_verifyutf8(upb_decstate *d, const char *buf, int len) {
|
173
|
+
if (!decode_verifyutf8_inl(buf, len)) decode_err(d);
|
190
174
|
}
|
191
175
|
|
192
176
|
static bool decode_reserve(upb_decstate *d, upb_array *arr, size_t elem) {
|
193
177
|
bool need_realloc = arr->size - arr->len < elem;
|
194
|
-
if (need_realloc && !_upb_array_realloc(arr, arr->len + elem, d->arena)) {
|
178
|
+
if (need_realloc && !_upb_array_realloc(arr, arr->len + elem, &d->arena)) {
|
195
179
|
decode_err(d);
|
196
180
|
}
|
197
181
|
return need_realloc;
|
198
182
|
}
|
199
183
|
|
184
|
+
typedef struct {
|
185
|
+
const char *ptr;
|
186
|
+
uint64_t val;
|
187
|
+
} decode_vret;
|
188
|
+
|
200
189
|
UPB_NOINLINE
|
201
|
-
static
|
202
|
-
|
203
|
-
|
204
|
-
int
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
if (
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
}
|
214
|
-
|
215
|
-
*val = out;
|
216
|
-
return ptr;
|
190
|
+
static decode_vret decode_longvarint64(const char *ptr, uint64_t val) {
|
191
|
+
decode_vret ret = {NULL, 0};
|
192
|
+
uint64_t byte;
|
193
|
+
int i;
|
194
|
+
for (i = 1; i < 10; i++) {
|
195
|
+
byte = (uint8_t)ptr[i];
|
196
|
+
val += (byte - 1) << (i * 7);
|
197
|
+
if (!(byte & 0x80)) {
|
198
|
+
ret.ptr = ptr + i + 1;
|
199
|
+
ret.val = val;
|
200
|
+
return ret;
|
201
|
+
}
|
202
|
+
}
|
203
|
+
return ret;
|
217
204
|
}
|
218
205
|
|
219
206
|
UPB_FORCEINLINE
|
220
207
|
static const char *decode_varint64(upb_decstate *d, const char *ptr,
|
221
|
-
|
222
|
-
|
223
|
-
|
208
|
+
uint64_t *val) {
|
209
|
+
uint64_t byte = (uint8_t)*ptr;
|
210
|
+
if (UPB_LIKELY((byte & 0x80) == 0)) {
|
211
|
+
*val = byte;
|
224
212
|
return ptr + 1;
|
225
213
|
} else {
|
226
|
-
|
214
|
+
decode_vret res = decode_longvarint64(ptr, byte);
|
215
|
+
if (!res.ptr) decode_err(d);
|
216
|
+
*val = res.val;
|
217
|
+
return res.ptr;
|
227
218
|
}
|
228
219
|
}
|
229
220
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
if (
|
235
|
-
|
236
|
-
|
221
|
+
UPB_FORCEINLINE
|
222
|
+
static const char *decode_tag(upb_decstate *d, const char *ptr,
|
223
|
+
uint32_t *val) {
|
224
|
+
uint64_t byte = (uint8_t)*ptr;
|
225
|
+
if (UPB_LIKELY((byte & 0x80) == 0)) {
|
226
|
+
*val = byte;
|
227
|
+
return ptr + 1;
|
228
|
+
} else {
|
229
|
+
const char *start = ptr;
|
230
|
+
decode_vret res = decode_longvarint64(ptr, byte);
|
231
|
+
ptr = res.ptr;
|
232
|
+
*val = res.val;
|
233
|
+
if (!ptr || *val > UINT32_MAX || ptr - start > 5) decode_err(d);
|
234
|
+
return ptr;
|
235
|
+
}
|
237
236
|
}
|
238
237
|
|
239
238
|
static void decode_munge(int type, wireval *val) {
|
@@ -280,33 +279,65 @@ static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
|
|
280
279
|
static upb_msg *decode_newsubmsg(upb_decstate *d, const upb_msglayout *layout,
|
281
280
|
const upb_msglayout_field *field) {
|
282
281
|
const upb_msglayout *subl = layout->submsgs[field->submsg_index];
|
283
|
-
return
|
282
|
+
return _upb_msg_new_inl(subl, &d->arena);
|
283
|
+
}
|
284
|
+
|
285
|
+
UPB_NOINLINE
|
286
|
+
const char *decode_isdonefallback(upb_decstate *d, const char *ptr,
|
287
|
+
int overrun) {
|
288
|
+
ptr = decode_isdonefallback_inl(d, ptr, overrun);
|
289
|
+
if (ptr == NULL) {
|
290
|
+
decode_err(d);
|
291
|
+
}
|
292
|
+
return ptr;
|
293
|
+
}
|
294
|
+
|
295
|
+
static const char *decode_readstr(upb_decstate *d, const char *ptr, int size,
|
296
|
+
upb_strview *str) {
|
297
|
+
if (d->alias) {
|
298
|
+
str->data = ptr;
|
299
|
+
} else {
|
300
|
+
char *data = upb_arena_malloc(&d->arena, size);
|
301
|
+
if (!data) decode_err(d);
|
302
|
+
memcpy(data, ptr, size);
|
303
|
+
str->data = data;
|
304
|
+
}
|
305
|
+
str->size = size;
|
306
|
+
return ptr + size;
|
284
307
|
}
|
285
308
|
|
286
|
-
|
287
|
-
|
288
|
-
|
309
|
+
UPB_FORCEINLINE
|
310
|
+
static const char *decode_tosubmsg(upb_decstate *d, const char *ptr,
|
311
|
+
upb_msg *submsg, const upb_msglayout *layout,
|
312
|
+
const upb_msglayout_field *field, int size) {
|
289
313
|
const upb_msglayout *subl = layout->submsgs[field->submsg_index];
|
290
|
-
|
314
|
+
int saved_delta = decode_pushlimit(d, ptr, size);
|
291
315
|
if (--d->depth < 0) decode_err(d);
|
292
|
-
d
|
293
|
-
|
294
|
-
|
295
|
-
if (d->end_group !=
|
316
|
+
if (!decode_isdone(d, &ptr)) {
|
317
|
+
ptr = decode_msg(d, ptr, submsg, subl);
|
318
|
+
}
|
319
|
+
if (d->end_group != DECODE_NOGROUP) decode_err(d);
|
320
|
+
decode_poplimit(d, ptr, saved_delta);
|
296
321
|
d->depth++;
|
322
|
+
return ptr;
|
297
323
|
}
|
298
324
|
|
325
|
+
UPB_FORCEINLINE
|
299
326
|
static const char *decode_group(upb_decstate *d, const char *ptr,
|
300
327
|
upb_msg *submsg, const upb_msglayout *subl,
|
301
328
|
uint32_t number) {
|
302
329
|
if (--d->depth < 0) decode_err(d);
|
330
|
+
if (decode_isdone(d, &ptr)) {
|
331
|
+
decode_err(d);
|
332
|
+
}
|
303
333
|
ptr = decode_msg(d, ptr, submsg, subl);
|
304
334
|
if (d->end_group != number) decode_err(d);
|
305
|
-
d->end_group =
|
335
|
+
d->end_group = DECODE_NOGROUP;
|
306
336
|
d->depth++;
|
307
337
|
return ptr;
|
308
338
|
}
|
309
339
|
|
340
|
+
UPB_FORCEINLINE
|
310
341
|
static const char *decode_togroup(upb_decstate *d, const char *ptr,
|
311
342
|
upb_msg *submsg, const upb_msglayout *layout,
|
312
343
|
const upb_msglayout_field *field) {
|
@@ -322,15 +353,15 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
322
353
|
upb_array *arr = *arrp;
|
323
354
|
void *mem;
|
324
355
|
|
325
|
-
if (
|
326
|
-
|
327
|
-
|
356
|
+
if (arr) {
|
357
|
+
decode_reserve(d, arr, 1);
|
358
|
+
} else {
|
359
|
+
size_t lg2 = desctype_to_elem_size_lg2[field->descriptortype];
|
360
|
+
arr = _upb_array_new(&d->arena, 4, lg2);
|
328
361
|
if (!arr) decode_err(d);
|
329
362
|
*arrp = arr;
|
330
363
|
}
|
331
364
|
|
332
|
-
decode_reserve(d, arr, 1);
|
333
|
-
|
334
365
|
switch (op) {
|
335
366
|
case OP_SCALAR_LG2(0):
|
336
367
|
case OP_SCALAR_LG2(2):
|
@@ -341,15 +372,14 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
341
372
|
memcpy(mem, &val, 1 << op);
|
342
373
|
return ptr;
|
343
374
|
case OP_STRING:
|
344
|
-
decode_verifyutf8(d,
|
375
|
+
decode_verifyutf8(d, ptr, val.size);
|
345
376
|
/* Fallthrough. */
|
346
|
-
case OP_BYTES:
|
377
|
+
case OP_BYTES: {
|
347
378
|
/* Append bytes. */
|
348
|
-
|
349
|
-
UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(upb_strview), void);
|
379
|
+
upb_strview *str = (upb_strview*)_upb_array_ptr(arr) + arr->len;
|
350
380
|
arr->len++;
|
351
|
-
|
352
|
-
|
381
|
+
return decode_readstr(d, ptr, val.size, str);
|
382
|
+
}
|
353
383
|
case OP_SUBMSG: {
|
354
384
|
/* Append submessage / group. */
|
355
385
|
upb_msg *submsg = decode_newsubmsg(d, layout, field);
|
@@ -357,26 +387,25 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
357
387
|
submsg;
|
358
388
|
arr->len++;
|
359
389
|
if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) {
|
360
|
-
|
390
|
+
return decode_togroup(d, ptr, submsg, layout, field);
|
361
391
|
} else {
|
362
|
-
decode_tosubmsg(d, submsg, layout, field, val.
|
392
|
+
return decode_tosubmsg(d, ptr, submsg, layout, field, val.size);
|
363
393
|
}
|
364
|
-
return ptr;
|
365
394
|
}
|
366
395
|
case OP_FIXPCK_LG2(2):
|
367
396
|
case OP_FIXPCK_LG2(3): {
|
368
397
|
/* Fixed packed. */
|
369
398
|
int lg2 = op - OP_FIXPCK_LG2(0);
|
370
399
|
int mask = (1 << lg2) - 1;
|
371
|
-
size_t count = val.
|
372
|
-
if ((val.
|
400
|
+
size_t count = val.size >> lg2;
|
401
|
+
if ((val.size & mask) != 0) {
|
373
402
|
decode_err(d); /* Length isn't a round multiple of elem size. */
|
374
403
|
}
|
375
404
|
decode_reserve(d, arr, count);
|
376
405
|
mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
377
406
|
arr->len += count;
|
378
|
-
memcpy(mem,
|
379
|
-
return ptr;
|
407
|
+
memcpy(mem, ptr, val.size); /* XXX: ptr boundary. */
|
408
|
+
return ptr + val.size;
|
380
409
|
}
|
381
410
|
case OP_VARPCK_LG2(0):
|
382
411
|
case OP_VARPCK_LG2(2):
|
@@ -384,12 +413,11 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
384
413
|
/* Varint packed. */
|
385
414
|
int lg2 = op - OP_VARPCK_LG2(0);
|
386
415
|
int scale = 1 << lg2;
|
387
|
-
|
388
|
-
const char *end = ptr + val.str_val.size;
|
416
|
+
int saved_limit = decode_pushlimit(d, ptr, val.size);
|
389
417
|
char *out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
390
|
-
while (ptr
|
418
|
+
while (!decode_isdone(d, &ptr)) {
|
391
419
|
wireval elem;
|
392
|
-
ptr = decode_varint64(d, ptr,
|
420
|
+
ptr = decode_varint64(d, ptr, &elem.uint64_val);
|
393
421
|
decode_munge(field->descriptortype, &elem);
|
394
422
|
if (decode_reserve(d, arr, 1)) {
|
395
423
|
out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
|
@@ -398,7 +426,7 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
398
426
|
memcpy(out, &elem, scale);
|
399
427
|
out += scale;
|
400
428
|
}
|
401
|
-
|
429
|
+
decode_poplimit(d, ptr, saved_limit);
|
402
430
|
return ptr;
|
403
431
|
}
|
404
432
|
default:
|
@@ -406,9 +434,9 @@ static const char *decode_toarray(upb_decstate *d, const char *ptr,
|
|
406
434
|
}
|
407
435
|
}
|
408
436
|
|
409
|
-
static
|
410
|
-
|
411
|
-
|
437
|
+
static const char *decode_tomap(upb_decstate *d, const char *ptr, upb_msg *msg,
|
438
|
+
const upb_msglayout *layout,
|
439
|
+
const upb_msglayout_field *field, wireval val) {
|
412
440
|
upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *);
|
413
441
|
upb_map *map = *map_p;
|
414
442
|
upb_map_entry ent;
|
@@ -423,7 +451,7 @@ static void decode_tomap(upb_decstate *d, upb_msg *msg,
|
|
423
451
|
char val_size = desctype_to_mapsize[val_field->descriptortype];
|
424
452
|
UPB_ASSERT(key_field->offset == 0);
|
425
453
|
UPB_ASSERT(val_field->offset == sizeof(upb_strview));
|
426
|
-
map = _upb_map_new(d->arena, key_size, val_size);
|
454
|
+
map = _upb_map_new(&d->arena, key_size, val_size);
|
427
455
|
*map_p = map;
|
428
456
|
}
|
429
457
|
|
@@ -433,13 +461,12 @@ static void decode_tomap(upb_decstate *d, upb_msg *msg,
|
|
433
461
|
if (entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_MESSAGE ||
|
434
462
|
entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_GROUP) {
|
435
463
|
/* Create proactively to handle the case where it doesn't appear. */
|
436
|
-
ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], d->arena));
|
464
|
+
ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], &d->arena));
|
437
465
|
}
|
438
466
|
|
439
|
-
decode_tosubmsg(d, &ent.k, layout, field, val.
|
440
|
-
|
441
|
-
|
442
|
-
_upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, d->arena);
|
467
|
+
ptr = decode_tosubmsg(d, ptr, &ent.k, layout, field, val.size);
|
468
|
+
_upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, &d->arena);
|
469
|
+
return ptr;
|
443
470
|
}
|
444
471
|
|
445
472
|
static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
@@ -473,16 +500,15 @@ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
473
500
|
if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) {
|
474
501
|
ptr = decode_togroup(d, ptr, submsg, layout, field);
|
475
502
|
} else {
|
476
|
-
decode_tosubmsg(d, submsg, layout, field, val.
|
503
|
+
ptr = decode_tosubmsg(d, ptr, submsg, layout, field, val.size);
|
477
504
|
}
|
478
505
|
break;
|
479
506
|
}
|
480
507
|
case OP_STRING:
|
481
|
-
decode_verifyutf8(d,
|
508
|
+
decode_verifyutf8(d, ptr, val.size);
|
482
509
|
/* Fallthrough. */
|
483
510
|
case OP_BYTES:
|
484
|
-
|
485
|
-
break;
|
511
|
+
return decode_readstr(d, ptr, val.size, mem);
|
486
512
|
case OP_SCALAR_LG2(3):
|
487
513
|
memcpy(mem, &val, 8);
|
488
514
|
break;
|
@@ -499,9 +525,24 @@ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
499
525
|
return ptr;
|
500
526
|
}
|
501
527
|
|
528
|
+
UPB_FORCEINLINE
|
529
|
+
static bool decode_tryfastdispatch(upb_decstate *d, const char **ptr,
|
530
|
+
upb_msg *msg, const upb_msglayout *layout) {
|
531
|
+
#if UPB_FASTTABLE
|
532
|
+
if (layout && layout->table_mask != (unsigned char)-1) {
|
533
|
+
uint16_t tag = fastdecode_loadtag(*ptr);
|
534
|
+
intptr_t table = decode_totable(layout);
|
535
|
+
*ptr = fastdecode_tagdispatch(d, *ptr, msg, table, 0, tag);
|
536
|
+
return true;
|
537
|
+
}
|
538
|
+
#endif
|
539
|
+
return false;
|
540
|
+
}
|
541
|
+
|
542
|
+
UPB_NOINLINE
|
502
543
|
static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
503
544
|
const upb_msglayout *layout) {
|
504
|
-
while (
|
545
|
+
while (true) {
|
505
546
|
uint32_t tag;
|
506
547
|
const upb_msglayout_field *field;
|
507
548
|
int field_number;
|
@@ -510,7 +551,8 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
510
551
|
wireval val;
|
511
552
|
int op;
|
512
553
|
|
513
|
-
ptr
|
554
|
+
UPB_ASSERT(ptr < d->limit_ptr);
|
555
|
+
ptr = decode_tag(d, ptr, &tag);
|
514
556
|
field_number = tag >> 3;
|
515
557
|
wire_type = tag & 7;
|
516
558
|
|
@@ -518,12 +560,11 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
518
560
|
|
519
561
|
switch (wire_type) {
|
520
562
|
case UPB_WIRE_TYPE_VARINT:
|
521
|
-
ptr = decode_varint64(d, ptr,
|
563
|
+
ptr = decode_varint64(d, ptr, &val.uint64_val);
|
522
564
|
op = varint_ops[field->descriptortype];
|
523
565
|
decode_munge(field->descriptortype, &val);
|
524
566
|
break;
|
525
567
|
case UPB_WIRE_TYPE_32BIT:
|
526
|
-
if (d->limit - ptr < 4) decode_err(d);
|
527
568
|
memcpy(&val.uint32_val, ptr, 4);
|
528
569
|
val.uint32_val = _upb_be_swap32(val.uint32_val);
|
529
570
|
ptr += 4;
|
@@ -531,7 +572,6 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
531
572
|
if (((1 << field->descriptortype) & fixed32_ok) == 0) goto unknown;
|
532
573
|
break;
|
533
574
|
case UPB_WIRE_TYPE_64BIT:
|
534
|
-
if (d->limit - ptr < 8) decode_err(d);
|
535
575
|
memcpy(&val.uint64_val, ptr, 8);
|
536
576
|
val.uint64_val = _upb_be_swap64(val.uint64_val);
|
537
577
|
ptr += 8;
|
@@ -539,17 +579,16 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
539
579
|
if (((1 << field->descriptortype) & fixed64_ok) == 0) goto unknown;
|
540
580
|
break;
|
541
581
|
case UPB_WIRE_TYPE_DELIMITED: {
|
542
|
-
uint32_t size;
|
543
582
|
int ndx = field->descriptortype;
|
583
|
+
uint64_t size;
|
544
584
|
if (_upb_isrepeated(field)) ndx += 18;
|
545
|
-
ptr =
|
546
|
-
if (size >= INT32_MAX ||
|
585
|
+
ptr = decode_varint64(d, ptr, &size);
|
586
|
+
if (size >= INT32_MAX ||
|
587
|
+
ptr - d->end + (int32_t)size > d->limit) {
|
547
588
|
decode_err(d); /* Length overflow. */
|
548
589
|
}
|
549
|
-
val.str_val.data = ptr;
|
550
|
-
val.str_val.size = size;
|
551
|
-
ptr += size;
|
552
590
|
op = delim_ops[ndx];
|
591
|
+
val.size = size;
|
553
592
|
break;
|
554
593
|
}
|
555
594
|
case UPB_WIRE_TYPE_START_GROUP:
|
@@ -572,7 +611,7 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
572
611
|
ptr = decode_toarray(d, ptr, msg, layout, field, val, op);
|
573
612
|
break;
|
574
613
|
case _UPB_LABEL_MAP:
|
575
|
-
decode_tomap(d, msg, layout, field, val);
|
614
|
+
ptr = decode_tomap(d, ptr, msg, layout, field, val);
|
576
615
|
break;
|
577
616
|
default:
|
578
617
|
ptr = decode_tomsg(d, ptr, msg, layout, field, val, op);
|
@@ -582,36 +621,78 @@ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
|
|
582
621
|
unknown:
|
583
622
|
/* Skip unknown field. */
|
584
623
|
if (field_number == 0) decode_err(d);
|
585
|
-
if (wire_type ==
|
586
|
-
ptr = decode_group(d, ptr, NULL, NULL, field_number);
|
587
|
-
}
|
624
|
+
if (wire_type == UPB_WIRE_TYPE_DELIMITED) ptr += val.size;
|
588
625
|
if (msg) {
|
626
|
+
if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
|
627
|
+
d->unknown = field_start;
|
628
|
+
d->unknown_msg = msg;
|
629
|
+
ptr = decode_group(d, ptr, NULL, NULL, field_number);
|
630
|
+
d->unknown_msg = NULL;
|
631
|
+
field_start = d->unknown;
|
632
|
+
}
|
589
633
|
if (!_upb_msg_addunknown(msg, field_start, ptr - field_start,
|
590
|
-
d->arena)) {
|
634
|
+
&d->arena)) {
|
591
635
|
decode_err(d);
|
592
636
|
}
|
637
|
+
} else if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
|
638
|
+
ptr = decode_group(d, ptr, NULL, NULL, field_number);
|
593
639
|
}
|
594
640
|
}
|
641
|
+
|
642
|
+
if (decode_isdone(d, &ptr)) return ptr;
|
643
|
+
if (decode_tryfastdispatch(d, &ptr, msg, layout)) return ptr;
|
595
644
|
}
|
645
|
+
}
|
596
646
|
|
597
|
-
|
598
|
-
|
647
|
+
const char *fastdecode_generic(struct upb_decstate *d, const char *ptr,
|
648
|
+
upb_msg *msg, intptr_t table, uint64_t hasbits,
|
649
|
+
uint64_t data) {
|
650
|
+
(void)data;
|
651
|
+
*(uint32_t*)msg |= hasbits;
|
652
|
+
return decode_msg(d, ptr, msg, decode_totablep(table));
|
599
653
|
}
|
600
654
|
|
601
|
-
bool
|
602
|
-
|
655
|
+
bool _upb_decode(const char *buf, size_t size, void *msg,
|
656
|
+
const upb_msglayout *l, upb_arena *arena, int options) {
|
657
|
+
bool ok;
|
603
658
|
upb_decstate state;
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
659
|
+
unsigned depth = (unsigned)options >> 16;
|
660
|
+
|
661
|
+
if (size == 0) {
|
662
|
+
return true;
|
663
|
+
} else if (size <= 16) {
|
664
|
+
memset(&state.patch, 0, 32);
|
665
|
+
memcpy(&state.patch, buf, size);
|
666
|
+
buf = state.patch;
|
667
|
+
state.end = buf + size;
|
668
|
+
state.limit = 0;
|
669
|
+
state.alias = false;
|
670
|
+
} else {
|
671
|
+
state.end = buf + size - 16;
|
672
|
+
state.limit = 16;
|
673
|
+
state.alias = options & UPB_DECODE_ALIAS;
|
674
|
+
}
|
608
675
|
|
609
|
-
|
676
|
+
state.limit_ptr = state.end;
|
677
|
+
state.unknown_msg = NULL;
|
678
|
+
state.depth = depth ? depth : 64;
|
679
|
+
state.end_group = DECODE_NOGROUP;
|
680
|
+
state.arena.head = arena->head;
|
681
|
+
state.arena.last_size = arena->last_size;
|
682
|
+
state.arena.parent = arena;
|
610
683
|
|
611
|
-
if (
|
612
|
-
|
684
|
+
if (UPB_UNLIKELY(UPB_SETJMP(state.err))) {
|
685
|
+
ok = false;
|
686
|
+
} else {
|
687
|
+
if (!decode_tryfastdispatch(&state, &buf, msg, l)) {
|
688
|
+
decode_msg(&state, buf, msg, l);
|
689
|
+
}
|
690
|
+
ok = state.end_group == DECODE_NOGROUP;
|
691
|
+
}
|
613
692
|
|
614
|
-
|
693
|
+
arena->head.ptr = state.arena.head.ptr;
|
694
|
+
arena->head.end = state.arena.head.end;
|
695
|
+
return ok;
|
615
696
|
}
|
616
697
|
|
617
698
|
#undef OP_SCALAR_LG2
|