grpc 1.41.0.pre2 → 1.42.0
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 +81 -68
- 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
data/third_party/re2/re2/re2.h
CHANGED
@@ -40,6 +40,9 @@
|
|
40
40
|
// R"((?i)hello)" -- (?i) turns on case-insensitive matching
|
41
41
|
// R"(/\*(.*?)\*/)" -- .*? matches . minimum no. of times possible
|
42
42
|
//
|
43
|
+
// When using UTF-8 encoding, case-insensitive matching will perform
|
44
|
+
// simple case folding, not full case folding.
|
45
|
+
//
|
43
46
|
// -----------------------------------------------------------------------
|
44
47
|
// MATCHING INTERFACE:
|
45
48
|
//
|
@@ -205,6 +208,7 @@
|
|
205
208
|
#include <map>
|
206
209
|
#include <mutex>
|
207
210
|
#include <string>
|
211
|
+
#include <type_traits>
|
208
212
|
#include <vector>
|
209
213
|
|
210
214
|
#if defined(__APPLE__)
|
@@ -244,6 +248,7 @@ class RE2 {
|
|
244
248
|
ErrorBadCharRange, // bad character class range
|
245
249
|
ErrorMissingBracket, // missing closing ]
|
246
250
|
ErrorMissingParen, // missing closing )
|
251
|
+
ErrorUnexpectedParen, // unexpected closing )
|
247
252
|
ErrorTrailingBackslash, // trailing \ at end of regexp
|
248
253
|
ErrorRepeatArgument, // repeat argument missing, e.g. "*"
|
249
254
|
ErrorRepeatSize, // bad repetition argument
|
@@ -364,12 +369,12 @@ class RE2 {
|
|
364
369
|
// (void*)NULL (the corresponding matched sub-pattern is not copied)
|
365
370
|
//
|
366
371
|
// Returns true iff all of the following conditions are satisfied:
|
367
|
-
// a. "text" matches "re"
|
368
|
-
// b. The number of matched sub-patterns is >= number of supplied pointers
|
372
|
+
// a. "text" matches "re" fully - from the beginning to the end of "text".
|
373
|
+
// b. The number of matched sub-patterns is >= number of supplied pointers.
|
369
374
|
// c. The "i"th argument has a suitable type for holding the
|
370
375
|
// string captured as the "i"th sub-pattern. If you pass in
|
371
376
|
// NULL for the "i"th argument, or pass fewer arguments than
|
372
|
-
// number of sub-patterns, "i"th captured sub-pattern is
|
377
|
+
// number of sub-patterns, the "i"th captured sub-pattern is
|
373
378
|
// ignored.
|
374
379
|
//
|
375
380
|
// CAVEAT: An optional sub-pattern that does not exist in the
|
@@ -383,8 +388,17 @@ class RE2 {
|
|
383
388
|
return Apply(FullMatchN, text, re, Arg(std::forward<A>(a))...);
|
384
389
|
}
|
385
390
|
|
386
|
-
//
|
387
|
-
//
|
391
|
+
// Like FullMatch(), except that "re" is allowed to match a substring
|
392
|
+
// of "text".
|
393
|
+
//
|
394
|
+
// Returns true iff all of the following conditions are satisfied:
|
395
|
+
// a. "text" matches "re" partially - for some substring of "text".
|
396
|
+
// b. The number of matched sub-patterns is >= number of supplied pointers.
|
397
|
+
// c. The "i"th argument has a suitable type for holding the
|
398
|
+
// string captured as the "i"th sub-pattern. If you pass in
|
399
|
+
// NULL for the "i"th argument, or pass fewer arguments than
|
400
|
+
// number of sub-patterns, the "i"th captured sub-pattern is
|
401
|
+
// ignored.
|
388
402
|
template <typename... A>
|
389
403
|
static bool PartialMatch(const StringPiece& text, const RE2& re, A&&... a) {
|
390
404
|
return Apply(PartialMatchN, text, re, Arg(std::forward<A>(a))...);
|
@@ -393,7 +407,16 @@ class RE2 {
|
|
393
407
|
// Like FullMatch() and PartialMatch(), except that "re" has to match
|
394
408
|
// a prefix of the text, and "input" is advanced past the matched
|
395
409
|
// text. Note: "input" is modified iff this routine returns true
|
396
|
-
// and "re" matched a non-empty substring of "
|
410
|
+
// and "re" matched a non-empty substring of "input".
|
411
|
+
//
|
412
|
+
// Returns true iff all of the following conditions are satisfied:
|
413
|
+
// a. "input" matches "re" partially - for some prefix of "input".
|
414
|
+
// b. The number of matched sub-patterns is >= number of supplied pointers.
|
415
|
+
// c. The "i"th argument has a suitable type for holding the
|
416
|
+
// string captured as the "i"th sub-pattern. If you pass in
|
417
|
+
// NULL for the "i"th argument, or pass fewer arguments than
|
418
|
+
// number of sub-patterns, the "i"th captured sub-pattern is
|
419
|
+
// ignored.
|
397
420
|
template <typename... A>
|
398
421
|
static bool Consume(StringPiece* input, const RE2& re, A&&... a) {
|
399
422
|
return Apply(ConsumeN, input, re, Arg(std::forward<A>(a))...);
|
@@ -403,6 +426,15 @@ class RE2 {
|
|
403
426
|
// the text. That is, "re" need not start its match at the beginning
|
404
427
|
// of "input". For example, "FindAndConsume(s, "(\\w+)", &word)" finds
|
405
428
|
// the next word in "s" and stores it in "word".
|
429
|
+
//
|
430
|
+
// Returns true iff all of the following conditions are satisfied:
|
431
|
+
// a. "input" matches "re" partially - for some substring of "input".
|
432
|
+
// b. The number of matched sub-patterns is >= number of supplied pointers.
|
433
|
+
// c. The "i"th argument has a suitable type for holding the
|
434
|
+
// string captured as the "i"th sub-pattern. If you pass in
|
435
|
+
// NULL for the "i"th argument, or pass fewer arguments than
|
436
|
+
// number of sub-patterns, the "i"th captured sub-pattern is
|
437
|
+
// ignored.
|
406
438
|
template <typename... A>
|
407
439
|
static bool FindAndConsume(StringPiece* input, const RE2& re, A&&... a) {
|
408
440
|
return Apply(FindAndConsumeN, input, re, Arg(std::forward<A>(a))...);
|
@@ -703,32 +735,12 @@ class RE2 {
|
|
703
735
|
const Options& options() const { return options_; }
|
704
736
|
|
705
737
|
// Argument converters; see below.
|
706
|
-
|
707
|
-
static
|
708
|
-
|
709
|
-
static
|
710
|
-
|
711
|
-
static
|
712
|
-
static inline Arg CRadix(long long* x);
|
713
|
-
static inline Arg CRadix(unsigned long long* x);
|
714
|
-
|
715
|
-
static inline Arg Hex(short* x);
|
716
|
-
static inline Arg Hex(unsigned short* x);
|
717
|
-
static inline Arg Hex(int* x);
|
718
|
-
static inline Arg Hex(unsigned int* x);
|
719
|
-
static inline Arg Hex(long* x);
|
720
|
-
static inline Arg Hex(unsigned long* x);
|
721
|
-
static inline Arg Hex(long long* x);
|
722
|
-
static inline Arg Hex(unsigned long long* x);
|
723
|
-
|
724
|
-
static inline Arg Octal(short* x);
|
725
|
-
static inline Arg Octal(unsigned short* x);
|
726
|
-
static inline Arg Octal(int* x);
|
727
|
-
static inline Arg Octal(unsigned int* x);
|
728
|
-
static inline Arg Octal(long* x);
|
729
|
-
static inline Arg Octal(unsigned long* x);
|
730
|
-
static inline Arg Octal(long long* x);
|
731
|
-
static inline Arg Octal(unsigned long long* x);
|
738
|
+
template <typename T>
|
739
|
+
static Arg CRadix(T* ptr);
|
740
|
+
template <typename T>
|
741
|
+
static Arg Hex(T* ptr);
|
742
|
+
template <typename T>
|
743
|
+
static Arg Octal(T* ptr);
|
732
744
|
|
733
745
|
private:
|
734
746
|
void Init(const StringPiece& pattern, const Options& options);
|
@@ -771,130 +783,130 @@ class RE2 {
|
|
771
783
|
|
772
784
|
/***** Implementation details *****/
|
773
785
|
|
774
|
-
|
775
|
-
|
776
|
-
//
|
777
|
-
template <
|
778
|
-
|
779
|
-
public
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
};
|
786
|
+
namespace re2_internal {
|
787
|
+
|
788
|
+
// Types for which the 3-ary Parse() function template has specializations.
|
789
|
+
template <typename T> struct Parse3ary : public std::false_type {};
|
790
|
+
template <> struct Parse3ary<void> : public std::true_type {};
|
791
|
+
template <> struct Parse3ary<std::string> : public std::true_type {};
|
792
|
+
template <> struct Parse3ary<StringPiece> : public std::true_type {};
|
793
|
+
template <> struct Parse3ary<char> : public std::true_type {};
|
794
|
+
template <> struct Parse3ary<signed char> : public std::true_type {};
|
795
|
+
template <> struct Parse3ary<unsigned char> : public std::true_type {};
|
796
|
+
template <> struct Parse3ary<float> : public std::true_type {};
|
797
|
+
template <> struct Parse3ary<double> : public std::true_type {};
|
798
|
+
|
799
|
+
template <typename T>
|
800
|
+
bool Parse(const char* str, size_t n, T* dest);
|
801
|
+
|
802
|
+
// Types for which the 4-ary Parse() function template has specializations.
|
803
|
+
template <typename T> struct Parse4ary : public std::false_type {};
|
804
|
+
template <> struct Parse4ary<long> : public std::true_type {};
|
805
|
+
template <> struct Parse4ary<unsigned long> : public std::true_type {};
|
806
|
+
template <> struct Parse4ary<short> : public std::true_type {};
|
807
|
+
template <> struct Parse4ary<unsigned short> : public std::true_type {};
|
808
|
+
template <> struct Parse4ary<int> : public std::true_type {};
|
809
|
+
template <> struct Parse4ary<unsigned int> : public std::true_type {};
|
810
|
+
template <> struct Parse4ary<long long> : public std::true_type {};
|
811
|
+
template <> struct Parse4ary<unsigned long long> : public std::true_type {};
|
812
|
+
|
813
|
+
template <typename T>
|
814
|
+
bool Parse(const char* str, size_t n, T* dest, int radix);
|
815
|
+
|
816
|
+
} // namespace re2_internal
|
786
817
|
|
787
818
|
class RE2::Arg {
|
819
|
+
private:
|
820
|
+
template <typename T>
|
821
|
+
using CanParse3ary = typename std::enable_if<
|
822
|
+
re2_internal::Parse3ary<T>::value,
|
823
|
+
int>::type;
|
824
|
+
|
825
|
+
template <typename T>
|
826
|
+
using CanParse4ary = typename std::enable_if<
|
827
|
+
re2_internal::Parse4ary<T>::value,
|
828
|
+
int>::type;
|
829
|
+
|
830
|
+
#if !defined(_MSC_VER)
|
831
|
+
template <typename T>
|
832
|
+
using CanParseFrom = typename std::enable_if<
|
833
|
+
std::is_member_function_pointer<
|
834
|
+
decltype(static_cast<bool (T::*)(const char*, size_t)>(
|
835
|
+
&T::ParseFrom))>::value,
|
836
|
+
int>::type;
|
837
|
+
#endif
|
838
|
+
|
788
839
|
public:
|
789
|
-
|
790
|
-
Arg()
|
840
|
+
Arg() : Arg(nullptr) {}
|
841
|
+
Arg(std::nullptr_t ptr) : arg_(ptr), parser_(DoNothing) {}
|
791
842
|
|
792
|
-
|
793
|
-
Arg(
|
794
|
-
|
843
|
+
template <typename T, CanParse3ary<T> = 0>
|
844
|
+
Arg(T* ptr) : arg_(ptr), parser_(DoParse3ary<T>) {}
|
845
|
+
|
846
|
+
template <typename T, CanParse4ary<T> = 0>
|
847
|
+
Arg(T* ptr) : arg_(ptr), parser_(DoParse4ary<T>) {}
|
848
|
+
|
849
|
+
#if !defined(_MSC_VER)
|
850
|
+
template <typename T, CanParseFrom<T> = 0>
|
851
|
+
Arg(T* ptr) : arg_(ptr), parser_(DoParseFrom<T>) {}
|
852
|
+
#endif
|
795
853
|
|
796
854
|
typedef bool (*Parser)(const char* str, size_t n, void* dest);
|
797
855
|
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
MAKE_PARSER(signed char, parse_schar)
|
805
|
-
MAKE_PARSER(unsigned char, parse_uchar)
|
806
|
-
MAKE_PARSER(float, parse_float)
|
807
|
-
MAKE_PARSER(double, parse_double)
|
808
|
-
MAKE_PARSER(std::string, parse_string)
|
809
|
-
MAKE_PARSER(StringPiece, parse_stringpiece)
|
810
|
-
|
811
|
-
MAKE_PARSER(short, parse_short)
|
812
|
-
MAKE_PARSER(unsigned short, parse_ushort)
|
813
|
-
MAKE_PARSER(int, parse_int)
|
814
|
-
MAKE_PARSER(unsigned int, parse_uint)
|
815
|
-
MAKE_PARSER(long, parse_long)
|
816
|
-
MAKE_PARSER(unsigned long, parse_ulong)
|
817
|
-
MAKE_PARSER(long long, parse_longlong)
|
818
|
-
MAKE_PARSER(unsigned long long, parse_ulonglong)
|
819
|
-
|
820
|
-
#undef MAKE_PARSER
|
821
|
-
|
822
|
-
// Generic constructor templates
|
823
|
-
template <class T> Arg(T* p)
|
824
|
-
: arg_(p), parser_(_RE2_MatchObject<T>::Parse) { }
|
825
|
-
template <class T> Arg(T* p, Parser parser)
|
826
|
-
: arg_(p), parser_(parser) { }
|
827
|
-
|
828
|
-
// Parse the data
|
829
|
-
bool Parse(const char* str, size_t n) const;
|
856
|
+
template <typename T>
|
857
|
+
Arg(T* ptr, Parser parser) : arg_(ptr), parser_(parser) {}
|
858
|
+
|
859
|
+
bool Parse(const char* str, size_t n) const {
|
860
|
+
return (*parser_)(str, n, arg_);
|
861
|
+
}
|
830
862
|
|
831
863
|
private:
|
832
|
-
void*
|
833
|
-
|
864
|
+
static bool DoNothing(const char* /*str*/, size_t /*n*/, void* /*dest*/) {
|
865
|
+
return true;
|
866
|
+
}
|
834
867
|
|
835
|
-
|
836
|
-
static bool
|
837
|
-
|
838
|
-
|
839
|
-
static bool parse_float (const char* str, size_t n, void* dest);
|
840
|
-
static bool parse_double (const char* str, size_t n, void* dest);
|
841
|
-
static bool parse_string (const char* str, size_t n, void* dest);
|
842
|
-
static bool parse_stringpiece (const char* str, size_t n, void* dest);
|
843
|
-
|
844
|
-
#define DECLARE_INTEGER_PARSER(name) \
|
845
|
-
private: \
|
846
|
-
static bool parse_##name(const char* str, size_t n, void* dest); \
|
847
|
-
static bool parse_##name##_radix(const char* str, size_t n, void* dest, \
|
848
|
-
int radix); \
|
849
|
-
\
|
850
|
-
public: \
|
851
|
-
static bool parse_##name##_hex(const char* str, size_t n, void* dest); \
|
852
|
-
static bool parse_##name##_octal(const char* str, size_t n, void* dest); \
|
853
|
-
static bool parse_##name##_cradix(const char* str, size_t n, void* dest);
|
854
|
-
|
855
|
-
DECLARE_INTEGER_PARSER(short)
|
856
|
-
DECLARE_INTEGER_PARSER(ushort)
|
857
|
-
DECLARE_INTEGER_PARSER(int)
|
858
|
-
DECLARE_INTEGER_PARSER(uint)
|
859
|
-
DECLARE_INTEGER_PARSER(long)
|
860
|
-
DECLARE_INTEGER_PARSER(ulong)
|
861
|
-
DECLARE_INTEGER_PARSER(longlong)
|
862
|
-
DECLARE_INTEGER_PARSER(ulonglong)
|
863
|
-
|
864
|
-
#undef DECLARE_INTEGER_PARSER
|
868
|
+
template <typename T>
|
869
|
+
static bool DoParse3ary(const char* str, size_t n, void* dest) {
|
870
|
+
return re2_internal::Parse(str, n, reinterpret_cast<T*>(dest));
|
871
|
+
}
|
865
872
|
|
866
|
-
|
873
|
+
template <typename T>
|
874
|
+
static bool DoParse4ary(const char* str, size_t n, void* dest) {
|
875
|
+
return re2_internal::Parse(str, n, reinterpret_cast<T*>(dest), 10);
|
876
|
+
}
|
867
877
|
|
868
|
-
|
869
|
-
|
870
|
-
|
878
|
+
#if !defined(_MSC_VER)
|
879
|
+
template <typename T>
|
880
|
+
static bool DoParseFrom(const char* str, size_t n, void* dest) {
|
881
|
+
if (dest == NULL) return true;
|
882
|
+
return reinterpret_cast<T*>(dest)->ParseFrom(str, n);
|
883
|
+
}
|
884
|
+
#endif
|
871
885
|
|
872
|
-
|
873
|
-
|
874
|
-
}
|
886
|
+
void* arg_;
|
887
|
+
Parser parser_;
|
888
|
+
};
|
875
889
|
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
return
|
880
|
-
}
|
881
|
-
|
882
|
-
return RE2::Arg(ptr, RE2::Arg::parse_##name##_octal); \
|
883
|
-
} \
|
884
|
-
inline RE2::Arg RE2::CRadix(type* ptr) { \
|
885
|
-
return RE2::Arg(ptr, RE2::Arg::parse_##name##_cradix); \
|
886
|
-
}
|
890
|
+
template <typename T>
|
891
|
+
inline RE2::Arg RE2::CRadix(T* ptr) {
|
892
|
+
return RE2::Arg(ptr, [](const char* str, size_t n, void* dest) -> bool {
|
893
|
+
return re2_internal::Parse(str, n, reinterpret_cast<T*>(dest), 0);
|
894
|
+
});
|
895
|
+
}
|
887
896
|
|
888
|
-
|
889
|
-
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
|
894
|
-
MAKE_INTEGER_PARSER(long long, longlong)
|
895
|
-
MAKE_INTEGER_PARSER(unsigned long long, ulonglong)
|
897
|
+
template <typename T>
|
898
|
+
inline RE2::Arg RE2::Hex(T* ptr) {
|
899
|
+
return RE2::Arg(ptr, [](const char* str, size_t n, void* dest) -> bool {
|
900
|
+
return re2_internal::Parse(str, n, reinterpret_cast<T*>(dest), 16);
|
901
|
+
});
|
902
|
+
}
|
896
903
|
|
897
|
-
|
904
|
+
template <typename T>
|
905
|
+
inline RE2::Arg RE2::Octal(T* ptr) {
|
906
|
+
return RE2::Arg(ptr, [](const char* str, size_t n, void* dest) -> bool {
|
907
|
+
return re2_internal::Parse(str, n, reinterpret_cast<T*>(dest), 8);
|
908
|
+
});
|
909
|
+
}
|
898
910
|
|
899
911
|
#ifndef SWIG
|
900
912
|
// Silence warnings about missing initializers for members of LazyRE2.
|
@@ -955,8 +967,11 @@ namespace hooks {
|
|
955
967
|
// thread_local, but for the sake of brevity, we lump together all versions
|
956
968
|
// of Apple platforms that aren't macOS. If an iOS application really needs
|
957
969
|
// the context pointee someday, we can get more specific then...
|
970
|
+
//
|
971
|
+
// As per https://github.com/google/re2/issues/325, thread_local support in
|
972
|
+
// MinGW seems to be buggy. (FWIW, Abseil folks also avoid it.)
|
958
973
|
#define RE2_HAVE_THREAD_LOCAL
|
959
|
-
#if defined(__APPLE__) && !TARGET_OS_OSX
|
974
|
+
#if (defined(__APPLE__) && !TARGET_OS_OSX) || defined(__MINGW32__)
|
960
975
|
#undef RE2_HAVE_THREAD_LOCAL
|
961
976
|
#endif
|
962
977
|
|
@@ -498,6 +498,7 @@ static const char *kErrorStrings[] = {
|
|
498
498
|
"invalid character class range",
|
499
499
|
"missing ]",
|
500
500
|
"missing )",
|
501
|
+
"unexpected )",
|
501
502
|
"trailing \\",
|
502
503
|
"no argument for repetition operator",
|
503
504
|
"invalid repetition size",
|
@@ -721,8 +722,14 @@ bool Regexp::RequiredPrefixForAccel(std::string* prefix, bool* foldcase) {
|
|
721
722
|
*foldcase = false;
|
722
723
|
|
723
724
|
// No need for a walker: the regexp must either begin with or be
|
724
|
-
// a literal char or string.
|
725
|
+
// a literal char or string. We "see through" capturing groups,
|
726
|
+
// but make no effort to glue multiple prefix fragments together.
|
725
727
|
Regexp* re = op_ == kRegexpConcat && nsub_ > 0 ? sub()[0] : this;
|
728
|
+
while (re->op_ == kRegexpCapture) {
|
729
|
+
re = re->sub()[0];
|
730
|
+
if (re->op_ == kRegexpConcat && re->nsub_ > 0)
|
731
|
+
re = re->sub()[0];
|
732
|
+
}
|
726
733
|
if (re->op_ != kRegexpLiteral &&
|
727
734
|
re->op_ != kRegexpLiteralString)
|
728
735
|
return false;
|
@@ -912,7 +919,7 @@ void CharClassBuilder::Negate() {
|
|
912
919
|
// The ranges are allocated in the same block as the header,
|
913
920
|
// necessitating a special allocator and Delete method.
|
914
921
|
|
915
|
-
CharClass* CharClass::New(
|
922
|
+
CharClass* CharClass::New(size_t maxranges) {
|
916
923
|
CharClass* cc;
|
917
924
|
uint8_t* data = new uint8_t[sizeof *cc + maxranges*sizeof cc->ranges_[0]];
|
918
925
|
cc = reinterpret_cast<CharClass*>(data);
|
@@ -929,7 +936,7 @@ void CharClass::Delete() {
|
|
929
936
|
}
|
930
937
|
|
931
938
|
CharClass* CharClass::Negate() {
|
932
|
-
CharClass* cc = CharClass::New(nranges_+1);
|
939
|
+
CharClass* cc = CharClass::New(static_cast<size_t>(nranges_+1));
|
933
940
|
cc->folds_ascii_ = folds_ascii_;
|
934
941
|
cc->nrunes_ = Runemax + 1 - nrunes_;
|
935
942
|
int n = 0;
|
@@ -948,7 +955,7 @@ CharClass* CharClass::Negate() {
|
|
948
955
|
return cc;
|
949
956
|
}
|
950
957
|
|
951
|
-
bool CharClass::Contains(Rune r) {
|
958
|
+
bool CharClass::Contains(Rune r) const {
|
952
959
|
RuneRange* rr = ranges_;
|
953
960
|
int n = nranges_;
|
954
961
|
while (n > 0) {
|
@@ -966,7 +973,7 @@ bool CharClass::Contains(Rune r) {
|
|
966
973
|
}
|
967
974
|
|
968
975
|
CharClass* CharClassBuilder::GetCharClass() {
|
969
|
-
CharClass* cc = CharClass::New(
|
976
|
+
CharClass* cc = CharClass::New(ranges_.size());
|
970
977
|
int n = 0;
|
971
978
|
for (iterator it = begin(); it != end(); ++it)
|
972
979
|
cc->ranges_[n++] = *it;
|
@@ -86,6 +86,7 @@
|
|
86
86
|
// form accessible to clients, so that client code can analyze the
|
87
87
|
// parsed regular expressions.
|
88
88
|
|
89
|
+
#include <stddef.h>
|
89
90
|
#include <stdint.h>
|
90
91
|
#include <map>
|
91
92
|
#include <set>
|
@@ -177,6 +178,7 @@ enum RegexpStatusCode {
|
|
177
178
|
kRegexpBadCharRange, // bad character class range
|
178
179
|
kRegexpMissingBracket, // missing closing ]
|
179
180
|
kRegexpMissingParen, // missing closing )
|
181
|
+
kRegexpUnexpectedParen, // unexpected closing )
|
180
182
|
kRegexpTrailingBackslash, // at end of regexp
|
181
183
|
kRegexpRepeatArgument, // repeat argument missing, e.g. "*"
|
182
184
|
kRegexpRepeatSize, // bad repetition argument
|
@@ -252,13 +254,13 @@ class CharClass {
|
|
252
254
|
bool full() { return nrunes_ == Runemax+1; }
|
253
255
|
bool FoldsASCII() { return folds_ascii_; }
|
254
256
|
|
255
|
-
bool Contains(Rune r);
|
257
|
+
bool Contains(Rune r) const;
|
256
258
|
CharClass* Negate();
|
257
259
|
|
258
260
|
private:
|
259
261
|
CharClass(); // not implemented
|
260
262
|
~CharClass(); // not implemented
|
261
|
-
static CharClass* New(
|
263
|
+
static CharClass* New(size_t maxranges);
|
262
264
|
|
263
265
|
friend class CharClassBuilder;
|
264
266
|
|
@@ -447,6 +449,10 @@ class Regexp {
|
|
447
449
|
// regardless of the return value.
|
448
450
|
bool RequiredPrefixForAccel(std::string* prefix, bool* foldcase);
|
449
451
|
|
452
|
+
// Controls the maximum repeat count permitted by the parser.
|
453
|
+
// FOR FUZZING ONLY.
|
454
|
+
static void FUZZING_ONLY_set_maximum_repeat_count(int i);
|
455
|
+
|
450
456
|
private:
|
451
457
|
// Constructor allocates vectors as appropriate for operator.
|
452
458
|
explicit Regexp(RegexpOp op, ParseFlags parse_flags);
|
data/third_party/re2/re2/set.cc
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
#include <stddef.h>
|
8
8
|
#include <algorithm>
|
9
9
|
#include <memory>
|
10
|
+
#include <utility>
|
10
11
|
|
11
12
|
#include "util/util.h"
|
12
13
|
#include "util/logging.h"
|
@@ -18,19 +19,37 @@
|
|
18
19
|
|
19
20
|
namespace re2 {
|
20
21
|
|
21
|
-
RE2::Set::Set(const RE2::Options& options, RE2::Anchor anchor)
|
22
|
-
|
22
|
+
RE2::Set::Set(const RE2::Options& options, RE2::Anchor anchor)
|
23
|
+
: options_(options),
|
24
|
+
anchor_(anchor),
|
25
|
+
compiled_(false),
|
26
|
+
size_(0) {
|
23
27
|
options_.set_never_capture(true); // might unblock some optimisations
|
24
|
-
anchor_ = anchor;
|
25
|
-
prog_ = NULL;
|
26
|
-
compiled_ = false;
|
27
|
-
size_ = 0;
|
28
28
|
}
|
29
29
|
|
30
30
|
RE2::Set::~Set() {
|
31
31
|
for (size_t i = 0; i < elem_.size(); i++)
|
32
32
|
elem_[i].second->Decref();
|
33
|
-
|
33
|
+
}
|
34
|
+
|
35
|
+
RE2::Set::Set(Set&& other)
|
36
|
+
: options_(other.options_),
|
37
|
+
anchor_(other.anchor_),
|
38
|
+
elem_(std::move(other.elem_)),
|
39
|
+
compiled_(other.compiled_),
|
40
|
+
size_(other.size_),
|
41
|
+
prog_(std::move(other.prog_)) {
|
42
|
+
other.elem_.clear();
|
43
|
+
other.elem_.shrink_to_fit();
|
44
|
+
other.compiled_ = false;
|
45
|
+
other.size_ = 0;
|
46
|
+
other.prog_.reset();
|
47
|
+
}
|
48
|
+
|
49
|
+
RE2::Set& RE2::Set::operator=(Set&& other) {
|
50
|
+
this->~Set();
|
51
|
+
(void) new (this) Set(std::move(other));
|
52
|
+
return *this;
|
34
53
|
}
|
35
54
|
|
36
55
|
int RE2::Set::Add(const StringPiece& pattern, std::string* error) {
|
@@ -97,9 +116,9 @@ bool RE2::Set::Compile() {
|
|
97
116
|
options_.ParseFlags());
|
98
117
|
re2::Regexp* re = re2::Regexp::Alternate(sub.data(), size_, pf);
|
99
118
|
|
100
|
-
prog_
|
119
|
+
prog_.reset(Prog::CompileSet(re, anchor_, options_.max_mem()));
|
101
120
|
re->Decref();
|
102
|
-
return prog_ !=
|
121
|
+
return prog_ != nullptr;
|
103
122
|
}
|
104
123
|
|
105
124
|
bool RE2::Set::Match(const StringPiece& text, std::vector<int>* v) const {
|
@@ -114,6 +133,9 @@ bool RE2::Set::Match(const StringPiece& text, std::vector<int>* v,
|
|
114
133
|
error_info->kind = kNotCompiled;
|
115
134
|
return false;
|
116
135
|
}
|
136
|
+
#ifdef RE2_HAVE_THREAD_LOCAL
|
137
|
+
hooks::context = NULL;
|
138
|
+
#endif
|
117
139
|
bool dfa_failed = false;
|
118
140
|
std::unique_ptr<SparseSet> matches;
|
119
141
|
if (v != NULL) {
|
data/third_party/re2/re2/set.h
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
#ifndef RE2_SET_H_
|
6
6
|
#define RE2_SET_H_
|
7
7
|
|
8
|
+
#include <memory>
|
8
9
|
#include <string>
|
9
10
|
#include <utility>
|
10
11
|
#include <vector>
|
@@ -36,6 +37,13 @@ class RE2::Set {
|
|
36
37
|
Set(const RE2::Options& options, RE2::Anchor anchor);
|
37
38
|
~Set();
|
38
39
|
|
40
|
+
// Not copyable.
|
41
|
+
Set(const Set&) = delete;
|
42
|
+
Set& operator=(const Set&) = delete;
|
43
|
+
// Movable.
|
44
|
+
Set(Set&& other);
|
45
|
+
Set& operator=(Set&& other);
|
46
|
+
|
39
47
|
// Adds pattern to the set using the options passed to the constructor.
|
40
48
|
// Returns the index that will identify the regexp in the output of Match(),
|
41
49
|
// or -1 if the regexp cannot be parsed.
|
@@ -67,12 +75,9 @@ class RE2::Set {
|
|
67
75
|
RE2::Options options_;
|
68
76
|
RE2::Anchor anchor_;
|
69
77
|
std::vector<Elem> elem_;
|
70
|
-
re2::Prog* prog_;
|
71
78
|
bool compiled_;
|
72
79
|
int size_;
|
73
|
-
|
74
|
-
Set(const Set&) = delete;
|
75
|
-
Set& operator=(const Set&) = delete;
|
80
|
+
std::unique_ptr<re2::Prog> prog_;
|
76
81
|
};
|
77
82
|
|
78
83
|
} // namespace re2
|
@@ -28,8 +28,6 @@ bool Regexp::SimplifyRegexp(const StringPiece& src, ParseFlags flags,
|
|
28
28
|
Regexp* sre = re->Simplify();
|
29
29
|
re->Decref();
|
30
30
|
if (sre == NULL) {
|
31
|
-
// Should not happen, since Simplify never fails.
|
32
|
-
LOG(ERROR) << "Simplify failed on " << src;
|
33
31
|
if (status) {
|
34
32
|
status->set_code(kRegexpInternalError);
|
35
33
|
status->set_error_arg(src);
|
@@ -180,10 +178,20 @@ Regexp* Regexp::Simplify() {
|
|
180
178
|
CoalesceWalker cw;
|
181
179
|
Regexp* cre = cw.Walk(this, NULL);
|
182
180
|
if (cre == NULL)
|
183
|
-
return
|
181
|
+
return NULL;
|
182
|
+
if (cw.stopped_early()) {
|
183
|
+
cre->Decref();
|
184
|
+
return NULL;
|
185
|
+
}
|
184
186
|
SimplifyWalker sw;
|
185
187
|
Regexp* sre = sw.Walk(cre, NULL);
|
186
188
|
cre->Decref();
|
189
|
+
if (sre == NULL)
|
190
|
+
return NULL;
|
191
|
+
if (sw.stopped_early()) {
|
192
|
+
sre->Decref();
|
193
|
+
return NULL;
|
194
|
+
}
|
187
195
|
return sre;
|
188
196
|
}
|
189
197
|
|
@@ -291,7 +291,7 @@ int ToStringWalker::PostVisit(Regexp* re, int parent_arg, int pre_arg,
|
|
291
291
|
// There's no syntax accepted by the parser to generate
|
292
292
|
// this node (it is generated by RE2::Set) so make something
|
293
293
|
// up that is readable but won't compile.
|
294
|
-
t_->append("(?HaveMatch:%d)", re->match_id());
|
294
|
+
t_->append(StringPrintf("(?HaveMatch:%d)", re->match_id()));
|
295
295
|
break;
|
296
296
|
}
|
297
297
|
|
@@ -119,7 +119,7 @@ template<typename T> T Regexp::Walker<T>::Copy(T arg) {
|
|
119
119
|
|
120
120
|
// State about a single level in the traversal.
|
121
121
|
template<typename T> struct WalkState {
|
122
|
-
WalkState
|
122
|
+
WalkState(Regexp* re, T parent)
|
123
123
|
: re(re),
|
124
124
|
n(-1),
|
125
125
|
parent_arg(parent),
|
@@ -12,6 +12,7 @@
|
|
12
12
|
|
13
13
|
#ifdef _WIN32
|
14
14
|
// Requires Windows Vista or Windows Server 2008 at minimum.
|
15
|
+
#include <windows.h>
|
15
16
|
#if defined(WINVER) && WINVER >= 0x0600
|
16
17
|
#define MUTEX_IS_WIN32_SRWLOCK
|
17
18
|
#endif
|
@@ -26,7 +27,6 @@
|
|
26
27
|
#endif
|
27
28
|
|
28
29
|
#if defined(MUTEX_IS_WIN32_SRWLOCK)
|
29
|
-
#include <windows.h>
|
30
30
|
typedef SRWLOCK MutexType;
|
31
31
|
#elif defined(MUTEX_IS_PTHREAD_RWLOCK)
|
32
32
|
#include <pthread.h>
|
@@ -66,7 +66,7 @@ class Mutex {
|
|
66
66
|
|
67
67
|
#if defined(MUTEX_IS_WIN32_SRWLOCK)
|
68
68
|
|
69
|
-
Mutex::Mutex()
|
69
|
+
Mutex::Mutex() : mutex_(SRWLOCK_INIT) { }
|
70
70
|
Mutex::~Mutex() { }
|
71
71
|
void Mutex::Lock() { AcquireSRWLockExclusive(&mutex_); }
|
72
72
|
void Mutex::Unlock() { ReleaseSRWLockExclusive(&mutex_); }
|