grpc 1.41.0 → 1.42.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 +57 -44
- data/etc/roots.pem +335 -326
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +278 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +83 -70
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
@@ -489,8 +489,8 @@ bool tls13_write_psk_binder(const SSL_HANDSHAKE *hs,
|
|
489
489
|
return false;
|
490
490
|
}
|
491
491
|
|
492
|
-
|
493
|
-
|
492
|
+
auto msg_binder = msg.last(verify_data_len);
|
493
|
+
OPENSSL_memcpy(msg_binder.data(), verify_data, verify_data_len);
|
494
494
|
if (out_binder_len != nullptr) {
|
495
495
|
*out_binder_len = verify_data_len;
|
496
496
|
}
|
@@ -537,57 +537,46 @@ size_t ssl_ech_confirmation_signal_hello_offset(const SSL *ssl) {
|
|
537
537
|
ECH_CONFIRMATION_SIGNAL_LEN;
|
538
538
|
}
|
539
539
|
|
540
|
-
bool ssl_ech_accept_confirmation(
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
//
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
if (
|
540
|
+
bool ssl_ech_accept_confirmation(const SSL_HANDSHAKE *hs, Span<uint8_t> out,
|
541
|
+
Span<const uint8_t> client_random,
|
542
|
+
const SSLTranscript &transcript, bool is_hrr,
|
543
|
+
Span<const uint8_t> msg, size_t offset) {
|
544
|
+
// See draft-ietf-tls-esni-13, sections 7.2 and 7.2.1.
|
545
|
+
static const uint8_t kZeros[EVP_MAX_MD_SIZE] = {0};
|
546
|
+
|
547
|
+
// We hash |msg|, with bytes from |offset| zeroed.
|
548
|
+
if (msg.size() < offset + ECH_CONFIRMATION_SIGNAL_LEN) {
|
549
549
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
550
550
|
return false;
|
551
551
|
}
|
552
552
|
|
553
|
-
auto
|
554
|
-
auto
|
555
|
-
|
556
|
-
|
557
|
-
unsigned context_hash_len;
|
553
|
+
auto before_zeros = msg.subspan(0, offset);
|
554
|
+
auto after_zeros = msg.subspan(offset + ECH_CONFIRMATION_SIGNAL_LEN);
|
555
|
+
uint8_t context[EVP_MAX_MD_SIZE];
|
556
|
+
unsigned context_len;
|
558
557
|
ScopedEVP_MD_CTX ctx;
|
559
558
|
if (!transcript.CopyToHashContext(ctx.get(), transcript.Digest()) ||
|
560
|
-
!EVP_DigestUpdate(ctx.get(),
|
561
|
-
|
562
|
-
!EVP_DigestUpdate(ctx.get(),
|
563
|
-
!
|
564
|
-
!EVP_DigestFinal_ex(ctx.get(), context_hash, &context_hash_len)) {
|
559
|
+
!EVP_DigestUpdate(ctx.get(), before_zeros.data(), before_zeros.size()) ||
|
560
|
+
!EVP_DigestUpdate(ctx.get(), kZeros, ECH_CONFIRMATION_SIGNAL_LEN) ||
|
561
|
+
!EVP_DigestUpdate(ctx.get(), after_zeros.data(), after_zeros.size()) ||
|
562
|
+
!EVP_DigestFinal_ex(ctx.get(), context, &context_len)) {
|
565
563
|
return false;
|
566
564
|
}
|
567
565
|
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
// TODO(https://crbug.com/boringssl/275): draft-11 will avoid this.
|
574
|
-
uint8_t accept_confirmation_buf[EVP_MAX_MD_SIZE];
|
575
|
-
bssl::Span<uint8_t> accept_confirmation =
|
576
|
-
MakeSpan(accept_confirmation_buf, transcript.DigestLen());
|
577
|
-
if (!hkdf_expand_label(accept_confirmation, transcript.Digest(),
|
578
|
-
hs->secret(), label_to_span("ech accept confirmation"),
|
579
|
-
MakeConstSpan(context_hash, context_hash_len))) {
|
566
|
+
uint8_t secret[EVP_MAX_MD_SIZE];
|
567
|
+
size_t secret_len;
|
568
|
+
if (!HKDF_extract(secret, &secret_len, transcript.Digest(),
|
569
|
+
client_random.data(), client_random.size(), kZeros,
|
570
|
+
transcript.DigestLen())) {
|
580
571
|
return false;
|
581
572
|
}
|
582
573
|
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
OPENSSL_memcpy(out.data(), accept_confirmation.data(), out.size());
|
590
|
-
return true;
|
574
|
+
assert(out.size() == ECH_CONFIRMATION_SIGNAL_LEN);
|
575
|
+
return hkdf_expand_label(out, transcript.Digest(),
|
576
|
+
MakeConstSpan(secret, secret_len),
|
577
|
+
is_hrr ? label_to_span("hrr ech accept confirmation")
|
578
|
+
: label_to_span("ech accept confirmation"),
|
579
|
+
MakeConstSpan(context, context_len));
|
591
580
|
}
|
592
581
|
|
593
582
|
BSSL_NAMESPACE_END
|
@@ -246,8 +246,7 @@ static enum ssl_hs_wait_t do_select_parameters(SSL_HANDSHAKE *hs) {
|
|
246
246
|
return ssl_hs_error;
|
247
247
|
}
|
248
248
|
|
249
|
-
// The PRF hash is now known.
|
250
|
-
// ClientHello.
|
249
|
+
// The PRF hash is now known.
|
251
250
|
if (!hs->transcript.InitHash(ssl_protocol_version(ssl), hs->new_cipher)) {
|
252
251
|
return ssl_hs_error;
|
253
252
|
}
|
@@ -270,7 +269,7 @@ static enum ssl_ticket_aead_result_t select_session(
|
|
270
269
|
return ssl_ticket_aead_ignore_ticket;
|
271
270
|
}
|
272
271
|
|
273
|
-
// Per
|
272
|
+
// Per RFC 8446, section 4.2.9, servers MUST abort the handshake if the client
|
274
273
|
// sends pre_shared_key without psk_key_exchange_modes.
|
275
274
|
CBS unused;
|
276
275
|
if (!ssl_client_hello_get_extension(client_hello, &unused,
|
@@ -571,12 +570,34 @@ static enum ssl_hs_wait_t do_send_hello_retry_request(SSL_HANDSHAKE *hs) {
|
|
571
570
|
!CBB_add_u16(&extensions, ssl->version) ||
|
572
571
|
!CBB_add_u16(&extensions, TLSEXT_TYPE_key_share) ||
|
573
572
|
!CBB_add_u16(&extensions, 2 /* length */) ||
|
574
|
-
!CBB_add_u16(&extensions, group_id)
|
575
|
-
!ssl_add_message_cbb(ssl, cbb.get())) {
|
573
|
+
!CBB_add_u16(&extensions, group_id)) {
|
576
574
|
return ssl_hs_error;
|
577
575
|
}
|
576
|
+
if (hs->ech_is_inner) {
|
577
|
+
// Fill a placeholder for the ECH confirmation value.
|
578
|
+
if (!CBB_add_u16(&extensions, TLSEXT_TYPE_encrypted_client_hello) ||
|
579
|
+
!CBB_add_u16(&extensions, ECH_CONFIRMATION_SIGNAL_LEN) ||
|
580
|
+
!CBB_add_zeros(&extensions, ECH_CONFIRMATION_SIGNAL_LEN)) {
|
581
|
+
return ssl_hs_error;
|
582
|
+
}
|
583
|
+
}
|
584
|
+
Array<uint8_t> hrr;
|
585
|
+
if (!ssl->method->finish_message(ssl, cbb.get(), &hrr)) {
|
586
|
+
return ssl_hs_error;
|
587
|
+
}
|
588
|
+
if (hs->ech_is_inner) {
|
589
|
+
// Now that the message is encoded, fill in the whole value.
|
590
|
+
size_t offset = hrr.size() - ECH_CONFIRMATION_SIGNAL_LEN;
|
591
|
+
if (!ssl_ech_accept_confirmation(
|
592
|
+
hs, MakeSpan(hrr).last(ECH_CONFIRMATION_SIGNAL_LEN),
|
593
|
+
ssl->s3->client_random, hs->transcript, /*is_hrr=*/true, hrr,
|
594
|
+
offset)) {
|
595
|
+
return ssl_hs_error;
|
596
|
+
}
|
597
|
+
}
|
578
598
|
|
579
|
-
if (!ssl->method->
|
599
|
+
if (!ssl->method->add_message(ssl, std::move(hrr)) ||
|
600
|
+
!ssl->method->add_change_cipher_spec(ssl)) {
|
580
601
|
return ssl_hs_error;
|
581
602
|
}
|
582
603
|
|
@@ -602,8 +623,8 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
602
623
|
}
|
603
624
|
|
604
625
|
if (ssl->s3->ech_status == ssl_ech_accepted) {
|
605
|
-
// If we previously accepted the ClientHelloInner,
|
606
|
-
//
|
626
|
+
// If we previously accepted the ClientHelloInner, the second ClientHello
|
627
|
+
// must contain an outer encrypted_client_hello extension.
|
607
628
|
CBS ech_body;
|
608
629
|
if (!ssl_client_hello_get_extension(&client_hello, &ech_body,
|
609
630
|
TLSEXT_TYPE_encrypted_client_hello)) {
|
@@ -611,12 +632,12 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
611
632
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
612
633
|
return ssl_hs_error;
|
613
634
|
}
|
614
|
-
|
615
|
-
// Parse a ClientECH out of the extension body.
|
616
635
|
uint16_t kdf_id, aead_id;
|
617
|
-
uint8_t config_id;
|
636
|
+
uint8_t type, config_id;
|
618
637
|
CBS enc, payload;
|
619
|
-
if (!
|
638
|
+
if (!CBS_get_u8(&ech_body, &type) || //
|
639
|
+
type != ECH_CLIENT_OUTER || //
|
640
|
+
!CBS_get_u16(&ech_body, &kdf_id) || //
|
620
641
|
!CBS_get_u16(&ech_body, &aead_id) ||
|
621
642
|
!CBS_get_u8(&ech_body, &config_id) ||
|
622
643
|
!CBS_get_u16_length_prefixed(&ech_body, &enc) ||
|
@@ -627,8 +648,6 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
627
648
|
return ssl_hs_error;
|
628
649
|
}
|
629
650
|
|
630
|
-
// Check that ClientECH.cipher_suite is unchanged and that
|
631
|
-
// ClientECH.enc is empty.
|
632
651
|
if (kdf_id != EVP_HPKE_KDF_id(EVP_HPKE_CTX_kdf(hs->ech_hpke_ctx.get())) ||
|
633
652
|
aead_id !=
|
634
653
|
EVP_HPKE_AEAD_id(EVP_HPKE_CTX_aead(hs->ech_hpke_ctx.get())) ||
|
@@ -641,9 +660,9 @@ static enum ssl_hs_wait_t do_read_second_client_hello(SSL_HANDSHAKE *hs) {
|
|
641
660
|
// Decrypt the payload with the HPKE context from the first ClientHello.
|
642
661
|
Array<uint8_t> encoded_client_hello_inner;
|
643
662
|
bool unused;
|
644
|
-
if (!ssl_client_hello_decrypt(
|
645
|
-
|
646
|
-
|
663
|
+
if (!ssl_client_hello_decrypt(hs->ech_hpke_ctx.get(),
|
664
|
+
&encoded_client_hello_inner, &unused,
|
665
|
+
&client_hello, payload)) {
|
647
666
|
// Decryption failure is fatal in the second ClientHello.
|
648
667
|
OPENSSL_PUT_ERROR(SSL, SSL_R_DECRYPTION_FAILED);
|
649
668
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_DECRYPT_ERROR);
|
@@ -761,18 +780,18 @@ static enum ssl_hs_wait_t do_send_server_hello(SSL_HANDSHAKE *hs) {
|
|
761
780
|
return ssl_hs_error;
|
762
781
|
}
|
763
782
|
|
764
|
-
assert(ssl->s3->ech_status != ssl_ech_accepted || hs->
|
765
|
-
if (hs->
|
783
|
+
assert(ssl->s3->ech_status != ssl_ech_accepted || hs->ech_is_inner);
|
784
|
+
if (hs->ech_is_inner) {
|
766
785
|
// Fill in the ECH confirmation signal.
|
767
|
-
|
768
|
-
|
769
|
-
if (!ssl_ech_accept_confirmation(hs, random_suffix,
|
770
|
-
|
786
|
+
const size_t offset = ssl_ech_confirmation_signal_hello_offset(ssl);
|
787
|
+
Span<uint8_t> random_suffix = random.last(ECH_CONFIRMATION_SIGNAL_LEN);
|
788
|
+
if (!ssl_ech_accept_confirmation(hs, random_suffix, ssl->s3->client_random,
|
789
|
+
hs->transcript,
|
790
|
+
/*is_hrr=*/false, server_hello, offset)) {
|
771
791
|
return ssl_hs_error;
|
772
792
|
}
|
773
793
|
|
774
794
|
// Update |server_hello|.
|
775
|
-
const size_t offset = ssl_ech_confirmation_signal_hello_offset(ssl);
|
776
795
|
Span<uint8_t> server_hello_out =
|
777
796
|
MakeSpan(server_hello).subspan(offset, ECH_CONFIRMATION_SIGNAL_LEN);
|
778
797
|
OPENSSL_memcpy(server_hello_out.data(), random_suffix.data(),
|
@@ -1041,20 +1060,15 @@ static enum ssl_hs_wait_t do_read_client_encrypted_extensions(
|
|
1041
1060
|
return ssl_hs_error;
|
1042
1061
|
}
|
1043
1062
|
|
1044
|
-
|
1045
|
-
bool have_application_settings = false;
|
1046
|
-
CBS application_settings;
|
1047
|
-
SSL_EXTENSION_TYPE ext_types[] = {{TLSEXT_TYPE_application_settings,
|
1048
|
-
&have_application_settings,
|
1049
|
-
&application_settings}};
|
1063
|
+
SSLExtension application_settings(TLSEXT_TYPE_application_settings);
|
1050
1064
|
uint8_t alert = SSL_AD_DECODE_ERROR;
|
1051
|
-
if (!ssl_parse_extensions(&extensions, &alert,
|
1065
|
+
if (!ssl_parse_extensions(&extensions, &alert, {&application_settings},
|
1052
1066
|
/*ignore_unknown=*/false)) {
|
1053
1067
|
ssl_send_alert(ssl, SSL3_AL_FATAL, alert);
|
1054
1068
|
return ssl_hs_error;
|
1055
1069
|
}
|
1056
1070
|
|
1057
|
-
if (!
|
1071
|
+
if (!application_settings.present) {
|
1058
1072
|
OPENSSL_PUT_ERROR(SSL, SSL_R_MISSING_EXTENSION);
|
1059
1073
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_MISSING_EXTENSION);
|
1060
1074
|
return ssl_hs_error;
|
@@ -1063,7 +1077,7 @@ static enum ssl_hs_wait_t do_read_client_encrypted_extensions(
|
|
1063
1077
|
// Note that, if 0-RTT was accepted, these values will already have been
|
1064
1078
|
// initialized earlier.
|
1065
1079
|
if (!hs->new_session->peer_application_settings.CopyFrom(
|
1066
|
-
application_settings) ||
|
1080
|
+
application_settings.data) ||
|
1067
1081
|
!ssl_hash_message(hs, msg)) {
|
1068
1082
|
ssl_send_alert(ssl, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
|
1069
1083
|
return ssl_hs_error;
|
@@ -30,92 +30,60 @@ namespace re2 {
|
|
30
30
|
// See http://swtch.com/~rsc/regexp/regexp1.html for inspiration.
|
31
31
|
//
|
32
32
|
// Because the out and out1 fields in Inst are no longer pointers,
|
33
|
-
// we can't use pointers directly here either. Instead,
|
34
|
-
// to inst_[
|
35
|
-
//
|
33
|
+
// we can't use pointers directly here either. Instead, head refers
|
34
|
+
// to inst_[head>>1].out (head&1 == 0) or inst_[head>>1].out1 (head&1 == 1).
|
35
|
+
// head == 0 represents the NULL list. This is okay because instruction #0
|
36
36
|
// is always the fail instruction, which never appears on a list.
|
37
|
-
|
38
37
|
struct PatchList {
|
39
|
-
uint32_t p;
|
40
|
-
|
41
38
|
// Returns patch list containing just p.
|
42
|
-
static PatchList Mk(uint32_t p)
|
39
|
+
static PatchList Mk(uint32_t p) {
|
40
|
+
return {p, p};
|
41
|
+
}
|
43
42
|
|
44
|
-
// Patches all the entries on l to have value
|
43
|
+
// Patches all the entries on l to have value p.
|
45
44
|
// Caller must not ever use patch list again.
|
46
|
-
static void Patch(Prog::Inst
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
// Returns patch list containing just p.
|
58
|
-
PatchList PatchList::Mk(uint32_t p) {
|
59
|
-
PatchList l;
|
60
|
-
l.p = p;
|
61
|
-
return l;
|
62
|
-
}
|
63
|
-
|
64
|
-
// Returns the next pointer pointed at by l.
|
65
|
-
PatchList PatchList::Deref(Prog::Inst* inst0, PatchList l) {
|
66
|
-
Prog::Inst* ip = &inst0[l.p>>1];
|
67
|
-
if (l.p&1)
|
68
|
-
l.p = ip->out1();
|
69
|
-
else
|
70
|
-
l.p = ip->out();
|
71
|
-
return l;
|
72
|
-
}
|
73
|
-
|
74
|
-
// Patches all the entries on l to have value v.
|
75
|
-
void PatchList::Patch(Prog::Inst *inst0, PatchList l, uint32_t val) {
|
76
|
-
while (l.p != 0) {
|
77
|
-
Prog::Inst* ip = &inst0[l.p>>1];
|
78
|
-
if (l.p&1) {
|
79
|
-
l.p = ip->out1();
|
80
|
-
ip->out1_ = val;
|
81
|
-
} else {
|
82
|
-
l.p = ip->out();
|
83
|
-
ip->set_out(val);
|
45
|
+
static void Patch(Prog::Inst* inst0, PatchList l, uint32_t p) {
|
46
|
+
while (l.head != 0) {
|
47
|
+
Prog::Inst* ip = &inst0[l.head>>1];
|
48
|
+
if (l.head&1) {
|
49
|
+
l.head = ip->out1();
|
50
|
+
ip->out1_ = p;
|
51
|
+
} else {
|
52
|
+
l.head = ip->out();
|
53
|
+
ip->set_out(p);
|
54
|
+
}
|
84
55
|
}
|
85
56
|
}
|
86
|
-
}
|
87
57
|
|
88
|
-
// Appends two patch lists and returns result.
|
89
|
-
PatchList
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
l = next;
|
58
|
+
// Appends two patch lists and returns result.
|
59
|
+
static PatchList Append(Prog::Inst* inst0, PatchList l1, PatchList l2) {
|
60
|
+
if (l1.head == 0)
|
61
|
+
return l2;
|
62
|
+
if (l2.head == 0)
|
63
|
+
return l1;
|
64
|
+
Prog::Inst* ip = &inst0[l1.tail>>1];
|
65
|
+
if (l1.tail&1)
|
66
|
+
ip->out1_ = l2.head;
|
67
|
+
else
|
68
|
+
ip->set_out(l2.head);
|
69
|
+
return {l1.head, l2.tail};
|
101
70
|
}
|
102
71
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
else
|
107
|
-
ip->set_out(l2.p);
|
72
|
+
uint32_t head;
|
73
|
+
uint32_t tail; // for constant-time append
|
74
|
+
};
|
108
75
|
|
109
|
-
|
110
|
-
}
|
76
|
+
static const PatchList kNullPatchList = {0, 0};
|
111
77
|
|
112
78
|
// Compiled program fragment.
|
113
79
|
struct Frag {
|
114
80
|
uint32_t begin;
|
115
81
|
PatchList end;
|
82
|
+
bool nullable;
|
116
83
|
|
117
|
-
Frag() : begin(0)
|
118
|
-
Frag(uint32_t begin, PatchList end
|
84
|
+
Frag() : begin(0), end(kNullPatchList), nullable(false) {}
|
85
|
+
Frag(uint32_t begin, PatchList end, bool nullable)
|
86
|
+
: begin(begin), end(end), nullable(nullable) {}
|
119
87
|
};
|
120
88
|
|
121
89
|
// Input encodings.
|
@@ -212,8 +180,8 @@ class Compiler : public Regexp::Walker<Frag> {
|
|
212
180
|
int AddSuffixRecursive(int root, int id);
|
213
181
|
|
214
182
|
// Finds the trie node for the given suffix. Returns a Frag in order to
|
215
|
-
// distinguish between pointing at the root node directly (end.
|
216
|
-
// and pointing at an Alt's out1 or out (end.
|
183
|
+
// distinguish between pointing at the root node directly (end.head == 0)
|
184
|
+
// and pointing at an Alt's out1 or out (end.head&1 == 1 or 0, respectively).
|
217
185
|
Frag FindByteRange(int root, int id);
|
218
186
|
|
219
187
|
// Compares two ByteRanges and returns true iff they are equal.
|
@@ -298,7 +266,7 @@ int Compiler::AllocInst(int n) {
|
|
298
266
|
|
299
267
|
// Returns an unmatchable fragment.
|
300
268
|
Frag Compiler::NoMatch() {
|
301
|
-
return Frag(
|
269
|
+
return Frag();
|
302
270
|
}
|
303
271
|
|
304
272
|
// Is a an unmatchable fragment?
|
@@ -314,7 +282,7 @@ Frag Compiler::Cat(Frag a, Frag b) {
|
|
314
282
|
// Elide no-op.
|
315
283
|
Prog::Inst* begin = &inst_[a.begin];
|
316
284
|
if (begin->opcode() == kInstNop &&
|
317
|
-
a.end.
|
285
|
+
a.end.head == (a.begin << 1) &&
|
318
286
|
begin->out() == 0) {
|
319
287
|
// in case refs to a somewhere
|
320
288
|
PatchList::Patch(inst_.data(), a.end, b.begin);
|
@@ -324,11 +292,11 @@ Frag Compiler::Cat(Frag a, Frag b) {
|
|
324
292
|
// To run backward over string, reverse all concatenations.
|
325
293
|
if (reversed_) {
|
326
294
|
PatchList::Patch(inst_.data(), b.end, a.begin);
|
327
|
-
return Frag(b.begin, a.end);
|
295
|
+
return Frag(b.begin, a.end, b.nullable && a.nullable);
|
328
296
|
}
|
329
297
|
|
330
298
|
PatchList::Patch(inst_.data(), a.end, b.begin);
|
331
|
-
return Frag(a.begin, b.end);
|
299
|
+
return Frag(a.begin, b.end, a.nullable && b.nullable);
|
332
300
|
}
|
333
301
|
|
334
302
|
// Given fragments for a and b, returns fragment for a|b.
|
@@ -344,7 +312,8 @@ Frag Compiler::Alt(Frag a, Frag b) {
|
|
344
312
|
return NoMatch();
|
345
313
|
|
346
314
|
inst_[id].InitAlt(a.begin, b.begin);
|
347
|
-
return Frag(id, PatchList::Append(inst_.data(), a.end, b.end)
|
315
|
+
return Frag(id, PatchList::Append(inst_.data(), a.end, b.end),
|
316
|
+
a.nullable || b.nullable);
|
348
317
|
}
|
349
318
|
|
350
319
|
// When capturing submatches in like-Perl mode, a kOpAlt Inst
|
@@ -354,27 +323,44 @@ Frag Compiler::Alt(Frag a, Frag b) {
|
|
354
323
|
// then the operator is greedy. If out1_ is the repetition
|
355
324
|
// (and out_ moves forward), then the operator is non-greedy.
|
356
325
|
|
357
|
-
// Given a fragment a, returns a fragment for a
|
358
|
-
Frag Compiler::
|
326
|
+
// Given a fragment for a, returns a fragment for a+ or a+? (if nongreedy)
|
327
|
+
Frag Compiler::Plus(Frag a, bool nongreedy) {
|
359
328
|
int id = AllocInst(1);
|
360
329
|
if (id < 0)
|
361
330
|
return NoMatch();
|
362
|
-
|
363
|
-
PatchList::Patch(inst_.data(), a.end, id);
|
331
|
+
PatchList pl;
|
364
332
|
if (nongreedy) {
|
365
|
-
inst_[id].
|
366
|
-
|
333
|
+
inst_[id].InitAlt(0, a.begin);
|
334
|
+
pl = PatchList::Mk(id << 1);
|
367
335
|
} else {
|
368
|
-
inst_[id].
|
369
|
-
|
336
|
+
inst_[id].InitAlt(a.begin, 0);
|
337
|
+
pl = PatchList::Mk((id << 1) | 1);
|
370
338
|
}
|
339
|
+
PatchList::Patch(inst_.data(), a.end, id);
|
340
|
+
return Frag(a.begin, pl, a.nullable);
|
371
341
|
}
|
372
342
|
|
373
|
-
// Given a fragment for a, returns a fragment for a
|
374
|
-
Frag Compiler::
|
375
|
-
//
|
376
|
-
|
377
|
-
|
343
|
+
// Given a fragment for a, returns a fragment for a* or a*? (if nongreedy)
|
344
|
+
Frag Compiler::Star(Frag a, bool nongreedy) {
|
345
|
+
// When the subexpression is nullable, one Alt isn't enough to guarantee
|
346
|
+
// correct priority ordering within the transitive closure. The simplest
|
347
|
+
// solution is to handle it as (a+)? instead, which adds the second Alt.
|
348
|
+
if (a.nullable)
|
349
|
+
return Quest(Plus(a, nongreedy), nongreedy);
|
350
|
+
|
351
|
+
int id = AllocInst(1);
|
352
|
+
if (id < 0)
|
353
|
+
return NoMatch();
|
354
|
+
PatchList pl;
|
355
|
+
if (nongreedy) {
|
356
|
+
inst_[id].InitAlt(0, a.begin);
|
357
|
+
pl = PatchList::Mk(id << 1);
|
358
|
+
} else {
|
359
|
+
inst_[id].InitAlt(a.begin, 0);
|
360
|
+
pl = PatchList::Mk((id << 1) | 1);
|
361
|
+
}
|
362
|
+
PatchList::Patch(inst_.data(), a.end, id);
|
363
|
+
return Frag(id, pl, true);
|
378
364
|
}
|
379
365
|
|
380
366
|
// Given a fragment for a, returns a fragment for a? or a?? (if nongreedy)
|
@@ -392,7 +378,7 @@ Frag Compiler::Quest(Frag a, bool nongreedy) {
|
|
392
378
|
inst_[id].InitAlt(a.begin, 0);
|
393
379
|
pl = PatchList::Mk((id << 1) | 1);
|
394
380
|
}
|
395
|
-
return Frag(id, PatchList::Append(inst_.data(), pl, a.end));
|
381
|
+
return Frag(id, PatchList::Append(inst_.data(), pl, a.end), true);
|
396
382
|
}
|
397
383
|
|
398
384
|
// Returns a fragment for the byte range lo-hi.
|
@@ -401,7 +387,7 @@ Frag Compiler::ByteRange(int lo, int hi, bool foldcase) {
|
|
401
387
|
if (id < 0)
|
402
388
|
return NoMatch();
|
403
389
|
inst_[id].InitByteRange(lo, hi, foldcase, 0);
|
404
|
-
return Frag(id, PatchList::Mk(id << 1));
|
390
|
+
return Frag(id, PatchList::Mk(id << 1), false);
|
405
391
|
}
|
406
392
|
|
407
393
|
// Returns a no-op fragment. Sometimes unavoidable.
|
@@ -410,7 +396,7 @@ Frag Compiler::Nop() {
|
|
410
396
|
if (id < 0)
|
411
397
|
return NoMatch();
|
412
398
|
inst_[id].InitNop(0);
|
413
|
-
return Frag(id, PatchList::Mk(id << 1));
|
399
|
+
return Frag(id, PatchList::Mk(id << 1), true);
|
414
400
|
}
|
415
401
|
|
416
402
|
// Returns a fragment that signals a match.
|
@@ -419,7 +405,7 @@ Frag Compiler::Match(int32_t match_id) {
|
|
419
405
|
if (id < 0)
|
420
406
|
return NoMatch();
|
421
407
|
inst_[id].InitMatch(match_id);
|
422
|
-
return Frag(id,
|
408
|
+
return Frag(id, kNullPatchList, false);
|
423
409
|
}
|
424
410
|
|
425
411
|
// Returns a fragment matching a particular empty-width op (like ^ or $)
|
@@ -428,7 +414,7 @@ Frag Compiler::EmptyWidth(EmptyOp empty) {
|
|
428
414
|
if (id < 0)
|
429
415
|
return NoMatch();
|
430
416
|
inst_[id].InitEmptyWidth(empty, 0);
|
431
|
-
return Frag(id, PatchList::Mk(id << 1));
|
417
|
+
return Frag(id, PatchList::Mk(id << 1), true);
|
432
418
|
}
|
433
419
|
|
434
420
|
// Given a fragment a, returns a fragment with capturing parens around a.
|
@@ -442,7 +428,7 @@ Frag Compiler::Capture(Frag a, int n) {
|
|
442
428
|
inst_[id+1].InitCapture(2*n+1, 0);
|
443
429
|
PatchList::Patch(inst_.data(), a.end, id+1);
|
444
430
|
|
445
|
-
return Frag(id, PatchList::Mk((id+1) << 1));
|
431
|
+
return Frag(id, PatchList::Mk((id+1) << 1), a.nullable);
|
446
432
|
}
|
447
433
|
|
448
434
|
// A Rune is a name for a Unicode code point.
|
@@ -467,7 +453,7 @@ static int MaxRune(int len) {
|
|
467
453
|
void Compiler::BeginRange() {
|
468
454
|
rune_cache_.clear();
|
469
455
|
rune_range_.begin = 0;
|
470
|
-
rune_range_.end =
|
456
|
+
rune_range_.end = kNullPatchList;
|
471
457
|
}
|
472
458
|
|
473
459
|
int Compiler::UncachedRuneByteSuffix(uint8_t lo, uint8_t hi, bool foldcase,
|
@@ -548,9 +534,9 @@ int Compiler::AddSuffixRecursive(int root, int id) {
|
|
548
534
|
}
|
549
535
|
|
550
536
|
int br;
|
551
|
-
if (f.end.
|
537
|
+
if (f.end.head == 0)
|
552
538
|
br = root;
|
553
|
-
else if (f.end.
|
539
|
+
else if (f.end.head&1)
|
554
540
|
br = inst_[f.begin].out1();
|
555
541
|
else
|
556
542
|
br = inst_[f.begin].out();
|
@@ -566,9 +552,9 @@ int Compiler::AddSuffixRecursive(int root, int id) {
|
|
566
552
|
// Ensure that the parent points to the clone, not to the original.
|
567
553
|
// Note that this could leave the head unreachable except via the cache.
|
568
554
|
br = byterange;
|
569
|
-
if (f.end.
|
555
|
+
if (f.end.head == 0)
|
570
556
|
root = br;
|
571
|
-
else if (f.end.
|
557
|
+
else if (f.end.head&1)
|
572
558
|
inst_[f.begin].out1_ = br;
|
573
559
|
else
|
574
560
|
inst_[f.begin].set_out(br);
|
@@ -601,7 +587,7 @@ bool Compiler::ByteRangeEqual(int id1, int id2) {
|
|
601
587
|
Frag Compiler::FindByteRange(int root, int id) {
|
602
588
|
if (inst_[root].opcode() == kInstByteRange) {
|
603
589
|
if (ByteRangeEqual(root, id))
|
604
|
-
return Frag(root,
|
590
|
+
return Frag(root, kNullPatchList, false);
|
605
591
|
else
|
606
592
|
return NoMatch();
|
607
593
|
}
|
@@ -609,7 +595,7 @@ Frag Compiler::FindByteRange(int root, int id) {
|
|
609
595
|
while (inst_[root].opcode() == kInstAlt) {
|
610
596
|
int out1 = inst_[root].out1();
|
611
597
|
if (ByteRangeEqual(out1, id))
|
612
|
-
return Frag(root, PatchList::Mk((root << 1) | 1));
|
598
|
+
return Frag(root, PatchList::Mk((root << 1) | 1), false);
|
613
599
|
|
614
600
|
// CharClass is a sorted list of ranges, so if out1 of the root Alt wasn't
|
615
601
|
// what we're looking for, then we can stop immediately. Unfortunately, we
|
@@ -621,7 +607,7 @@ Frag Compiler::FindByteRange(int root, int id) {
|
|
621
607
|
if (inst_[out].opcode() == kInstAlt)
|
622
608
|
root = out;
|
623
609
|
else if (ByteRangeEqual(out, id))
|
624
|
-
return Frag(root, PatchList::Mk(root << 1));
|
610
|
+
return Frag(root, PatchList::Mk(root << 1), false);
|
625
611
|
else
|
626
612
|
return NoMatch();
|
627
613
|
}
|
@@ -1190,12 +1176,8 @@ Prog* Compiler::Finish(Regexp* re) {
|
|
1190
1176
|
if (!prog_->reversed()) {
|
1191
1177
|
std::string prefix;
|
1192
1178
|
bool prefix_foldcase;
|
1193
|
-
if (re->RequiredPrefixForAccel(&prefix, &prefix_foldcase)
|
1194
|
-
|
1195
|
-
prog_->prefix_size_ = prefix.size();
|
1196
|
-
prog_->prefix_front_ = prefix.front();
|
1197
|
-
prog_->prefix_back_ = prefix.back();
|
1198
|
-
}
|
1179
|
+
if (re->RequiredPrefixForAccel(&prefix, &prefix_foldcase))
|
1180
|
+
prog_->ConfigurePrefixAccel(prefix, prefix_foldcase);
|
1199
1181
|
}
|
1200
1182
|
|
1201
1183
|
// Record remaining memory for DFA.
|