grpc 1.73.0 → 1.74.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +19 -29
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.h +5 -5
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +50 -1
- data/src/core/lib/promise/party.h +66 -1
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/filter_stack_call.cc +18 -9
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +83 -12
- data/src/core/server/server.h +21 -2
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +2 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/latent_see.h +8 -5
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +72 -568
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- metadata +72 -20
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -59,7 +59,7 @@ inline unsigned int hex_digit_to_int(char c) {
|
|
59
59
|
}
|
60
60
|
|
61
61
|
inline bool IsSurrogate(char32_t c, absl::string_view src,
|
62
|
-
|
62
|
+
std::string* absl_nullable error) {
|
63
63
|
if (c >= 0xD800 && c <= 0xDFFF) {
|
64
64
|
if (error) {
|
65
65
|
*error = absl::StrCat("invalid surrogate character (0xD800-DFFF): \\",
|
@@ -76,49 +76,49 @@ inline bool IsSurrogate(char32_t c, absl::string_view src,
|
|
76
76
|
//
|
77
77
|
// Unescapes C escape sequences and is the reverse of CEscape().
|
78
78
|
//
|
79
|
-
// If
|
80
|
-
//
|
81
|
-
//
|
82
|
-
//
|
79
|
+
// If `src` is valid, stores the unescaped string `dst`, and returns
|
80
|
+
// true. Otherwise returns false and optionally stores the error
|
81
|
+
// description in `error`. Set `error` to nullptr to disable error
|
82
|
+
// reporting.
|
83
83
|
//
|
84
|
-
//
|
85
|
-
// 'source' and 'dest' may be the same.
|
86
|
-
//
|
87
|
-
// NOTE: any changes to this function must also be reflected in the older
|
88
|
-
// UnescapeCEscapeSequences().
|
84
|
+
// `src` and `dst` may use the same underlying buffer.
|
89
85
|
// ----------------------------------------------------------------------
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
//
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
86
|
+
|
87
|
+
bool CUnescapeInternal(absl::string_view src, bool leave_nulls_escaped,
|
88
|
+
std::string* absl_nonnull dst,
|
89
|
+
std::string* absl_nullable error) {
|
90
|
+
strings_internal::STLStringResizeUninitialized(dst, src.size());
|
91
|
+
|
92
|
+
absl::string_view::size_type p = 0; // Current src position.
|
93
|
+
std::string::size_type d = 0; // Current dst position.
|
94
|
+
|
95
|
+
// When unescaping in-place, skip any prefix that does not have escaping.
|
96
|
+
if (src.data() == dst->data()) {
|
97
|
+
while (p < src.size() && src[p] != '\\') p++, d++;
|
98
|
+
}
|
99
|
+
|
100
|
+
while (p < src.size()) {
|
101
|
+
if (src[p] != '\\') {
|
102
|
+
(*dst)[d++] = src[p++];
|
105
103
|
} else {
|
106
|
-
if (++p
|
107
|
-
if (error
|
104
|
+
if (++p >= src.size()) { // skip past the '\\'
|
105
|
+
if (error != nullptr) {
|
106
|
+
*error = "String cannot end with \\";
|
107
|
+
}
|
108
108
|
return false;
|
109
109
|
}
|
110
|
-
switch (
|
111
|
-
case 'a': *d++ = '\a'; break;
|
112
|
-
case 'b': *d++ = '\b'; break;
|
113
|
-
case 'f': *d++ = '\f'; break;
|
114
|
-
case 'n': *d++ = '\n'; break;
|
115
|
-
case 'r': *d++ = '\r'; break;
|
116
|
-
case 't': *d++ = '\t'; break;
|
117
|
-
case 'v': *d++ = '\v'; break;
|
118
|
-
case '\\': *d++ = '\\'; break;
|
119
|
-
case '?': *d++ = '\?'; break;
|
120
|
-
case '\'': *d++ = '\''; break;
|
121
|
-
case '"': *d++ = '\"'; break;
|
110
|
+
switch (src[p]) {
|
111
|
+
case 'a': (*dst)[d++] = '\a'; break;
|
112
|
+
case 'b': (*dst)[d++] = '\b'; break;
|
113
|
+
case 'f': (*dst)[d++] = '\f'; break;
|
114
|
+
case 'n': (*dst)[d++] = '\n'; break;
|
115
|
+
case 'r': (*dst)[d++] = '\r'; break;
|
116
|
+
case 't': (*dst)[d++] = '\t'; break;
|
117
|
+
case 'v': (*dst)[d++] = '\v'; break;
|
118
|
+
case '\\': (*dst)[d++] = '\\'; break;
|
119
|
+
case '?': (*dst)[d++] = '\?'; break;
|
120
|
+
case '\'': (*dst)[d++] = '\''; break;
|
121
|
+
case '"': (*dst)[d++] = '\"'; break;
|
122
122
|
case '0':
|
123
123
|
case '1':
|
124
124
|
case '2':
|
@@ -128,188 +128,170 @@ bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
|
|
128
128
|
case '6':
|
129
129
|
case '7': {
|
130
130
|
// octal digit: 1 to 3 digits
|
131
|
-
|
132
|
-
unsigned int ch = static_cast<unsigned int>(
|
133
|
-
if (p <
|
134
|
-
ch = ch * 8 + static_cast<unsigned int>(
|
135
|
-
if (p <
|
136
|
-
ch = ch * 8 + static_cast<unsigned int>(
|
131
|
+
auto octal_start = p;
|
132
|
+
unsigned int ch = static_cast<unsigned int>(src[p] - '0'); // digit 1
|
133
|
+
if (p + 1 < src.size() && is_octal_digit(src[p + 1]))
|
134
|
+
ch = ch * 8 + static_cast<unsigned int>(src[++p] - '0'); // digit 2
|
135
|
+
if (p + 1 < src.size() && is_octal_digit(src[p + 1]))
|
136
|
+
ch = ch * 8 + static_cast<unsigned int>(src[++p] - '0'); // digit 3
|
137
137
|
if (ch > 0xff) {
|
138
|
-
if (error) {
|
139
|
-
*error =
|
140
|
-
|
141
|
-
|
142
|
-
|
138
|
+
if (error != nullptr) {
|
139
|
+
*error =
|
140
|
+
"Value of \\" +
|
141
|
+
std::string(src.substr(octal_start, p + 1 - octal_start)) +
|
142
|
+
" exceeds 0xff";
|
143
143
|
}
|
144
144
|
return false;
|
145
145
|
}
|
146
146
|
if ((ch == 0) && leave_nulls_escaped) {
|
147
147
|
// Copy the escape sequence for the null character
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
148
|
+
(*dst)[d++] = '\\';
|
149
|
+
while (octal_start <= p) {
|
150
|
+
(*dst)[d++] = src[octal_start++];
|
151
|
+
}
|
152
152
|
break;
|
153
153
|
}
|
154
|
-
*d++ = static_cast<char>(ch);
|
154
|
+
(*dst)[d++] = static_cast<char>(ch);
|
155
155
|
break;
|
156
156
|
}
|
157
157
|
case 'x':
|
158
158
|
case 'X': {
|
159
|
-
if (p >=
|
160
|
-
if (error
|
159
|
+
if (p + 1 >= src.size()) {
|
160
|
+
if (error != nullptr) {
|
161
|
+
*error = "String cannot end with \\x";
|
162
|
+
}
|
161
163
|
return false;
|
162
|
-
} else if (!absl::ascii_isxdigit(
|
163
|
-
|
164
|
+
} else if (!absl::ascii_isxdigit(
|
165
|
+
static_cast<unsigned char>(src[p + 1]))) {
|
166
|
+
if (error != nullptr) {
|
167
|
+
*error = "\\x cannot be followed by a non-hex digit";
|
168
|
+
}
|
164
169
|
return false;
|
165
170
|
}
|
166
171
|
unsigned int ch = 0;
|
167
|
-
|
168
|
-
while (p <
|
169
|
-
absl::ascii_isxdigit(static_cast<unsigned char>(p
|
172
|
+
auto hex_start = p;
|
173
|
+
while (p + 1 < src.size() &&
|
174
|
+
absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
|
170
175
|
// Arbitrarily many hex digits
|
171
|
-
ch = (ch << 4) + hex_digit_to_int(
|
176
|
+
ch = (ch << 4) + hex_digit_to_int(src[++p]);
|
177
|
+
}
|
172
178
|
if (ch > 0xFF) {
|
173
|
-
if (error) {
|
179
|
+
if (error != nullptr) {
|
174
180
|
*error = "Value of \\" +
|
175
|
-
std::string(hex_start,
|
176
|
-
static_cast<size_t>(p + 1 - hex_start)) +
|
181
|
+
std::string(src.substr(hex_start, p + 1 - hex_start)) +
|
177
182
|
" exceeds 0xff";
|
178
183
|
}
|
179
184
|
return false;
|
180
185
|
}
|
181
186
|
if ((ch == 0) && leave_nulls_escaped) {
|
182
187
|
// Copy the escape sequence for the null character
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
188
|
+
(*dst)[d++] = '\\';
|
189
|
+
while (hex_start <= p) {
|
190
|
+
(*dst)[d++] = src[hex_start++];
|
191
|
+
}
|
187
192
|
break;
|
188
193
|
}
|
189
|
-
*d++ = static_cast<char>(ch);
|
194
|
+
(*dst)[d++] = static_cast<char>(ch);
|
190
195
|
break;
|
191
196
|
}
|
192
197
|
case 'u': {
|
193
198
|
// \uhhhh => convert 4 hex digits to UTF-8
|
194
199
|
char32_t rune = 0;
|
195
|
-
|
196
|
-
if (p + 4 >=
|
197
|
-
if (error) {
|
198
|
-
*error = "\\u must be followed by 4 hex digits
|
199
|
-
std::string(hex_start,
|
200
|
-
static_cast<size_t>(p + 1 - hex_start));
|
200
|
+
auto hex_start = p;
|
201
|
+
if (p + 4 >= src.size()) {
|
202
|
+
if (error != nullptr) {
|
203
|
+
*error = "\\u must be followed by 4 hex digits";
|
201
204
|
}
|
202
205
|
return false;
|
203
206
|
}
|
204
207
|
for (int i = 0; i < 4; ++i) {
|
205
208
|
// Look one char ahead.
|
206
|
-
if (absl::ascii_isxdigit(static_cast<unsigned char>(p
|
207
|
-
rune = (rune << 4) + hex_digit_to_int(
|
209
|
+
if (absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
|
210
|
+
rune = (rune << 4) + hex_digit_to_int(src[++p]);
|
208
211
|
} else {
|
209
|
-
if (error) {
|
212
|
+
if (error != nullptr) {
|
210
213
|
*error = "\\u must be followed by 4 hex digits: \\" +
|
211
|
-
std::string(hex_start,
|
212
|
-
static_cast<size_t>(p + 1 - hex_start));
|
214
|
+
std::string(src.substr(hex_start, p + 1 - hex_start));
|
213
215
|
}
|
214
216
|
return false;
|
215
217
|
}
|
216
218
|
}
|
217
219
|
if ((rune == 0) && leave_nulls_escaped) {
|
218
220
|
// Copy the escape sequence for the null character
|
219
|
-
*d++ = '\\';
|
220
|
-
|
221
|
-
|
221
|
+
(*dst)[d++] = '\\';
|
222
|
+
while (hex_start <= p) {
|
223
|
+
(*dst)[d++] = src[hex_start++];
|
224
|
+
}
|
222
225
|
break;
|
223
226
|
}
|
224
|
-
if (IsSurrogate(rune,
|
227
|
+
if (IsSurrogate(rune, src.substr(hex_start, 5), error)) {
|
225
228
|
return false;
|
226
229
|
}
|
227
|
-
d += strings_internal::EncodeUTF8Char(d, rune);
|
230
|
+
d += strings_internal::EncodeUTF8Char(dst->data() + d, rune);
|
228
231
|
break;
|
229
232
|
}
|
230
233
|
case 'U': {
|
231
234
|
// \Uhhhhhhhh => convert 8 hex digits to UTF-8
|
232
235
|
char32_t rune = 0;
|
233
|
-
|
234
|
-
if (p + 8 >=
|
235
|
-
if (error) {
|
236
|
-
*error = "\\U must be followed by 8 hex digits
|
237
|
-
std::string(hex_start,
|
238
|
-
static_cast<size_t>(p + 1 - hex_start));
|
236
|
+
auto hex_start = p;
|
237
|
+
if (p + 8 >= src.size()) {
|
238
|
+
if (error != nullptr) {
|
239
|
+
*error = "\\U must be followed by 8 hex digits";
|
239
240
|
}
|
240
241
|
return false;
|
241
242
|
}
|
242
243
|
for (int i = 0; i < 8; ++i) {
|
243
244
|
// Look one char ahead.
|
244
|
-
if (absl::ascii_isxdigit(static_cast<unsigned char>(p
|
245
|
+
if (absl::ascii_isxdigit(static_cast<unsigned char>(src[p + 1]))) {
|
245
246
|
// Don't change rune until we're sure this
|
246
247
|
// is within the Unicode limit, but do advance p.
|
247
|
-
uint32_t newrune = (rune << 4) + hex_digit_to_int(
|
248
|
+
uint32_t newrune = (rune << 4) + hex_digit_to_int(src[++p]);
|
248
249
|
if (newrune > 0x10FFFF) {
|
249
|
-
if (error) {
|
250
|
-
*error =
|
251
|
-
|
252
|
-
|
253
|
-
|
250
|
+
if (error != nullptr) {
|
251
|
+
*error =
|
252
|
+
"Value of \\" +
|
253
|
+
std::string(src.substr(hex_start, p + 1 - hex_start)) +
|
254
|
+
" exceeds Unicode limit (0x10FFFF)";
|
254
255
|
}
|
255
256
|
return false;
|
256
257
|
} else {
|
257
258
|
rune = newrune;
|
258
259
|
}
|
259
260
|
} else {
|
260
|
-
if (error) {
|
261
|
+
if (error != nullptr) {
|
261
262
|
*error = "\\U must be followed by 8 hex digits: \\" +
|
262
|
-
std::string(hex_start,
|
263
|
-
static_cast<size_t>(p + 1 - hex_start));
|
263
|
+
std::string(src.substr(hex_start, p + 1 - hex_start));
|
264
264
|
}
|
265
265
|
return false;
|
266
266
|
}
|
267
267
|
}
|
268
268
|
if ((rune == 0) && leave_nulls_escaped) {
|
269
269
|
// Copy the escape sequence for the null character
|
270
|
-
*d++ = '\\';
|
271
|
-
|
272
|
-
|
270
|
+
(*dst)[d++] = '\\';
|
271
|
+
// U00000000
|
272
|
+
while (hex_start <= p) {
|
273
|
+
(*dst)[d++] = src[hex_start++];
|
274
|
+
}
|
273
275
|
break;
|
274
276
|
}
|
275
|
-
if (IsSurrogate(rune,
|
277
|
+
if (IsSurrogate(rune, src.substr(hex_start, 9), error)) {
|
276
278
|
return false;
|
277
279
|
}
|
278
|
-
d += strings_internal::EncodeUTF8Char(d, rune);
|
280
|
+
d += strings_internal::EncodeUTF8Char(dst->data() + d, rune);
|
279
281
|
break;
|
280
282
|
}
|
281
283
|
default: {
|
282
|
-
if (error
|
284
|
+
if (error != nullptr) {
|
285
|
+
*error = std::string("Unknown escape sequence: \\") + src[p];
|
286
|
+
}
|
283
287
|
return false;
|
284
288
|
}
|
285
289
|
}
|
286
|
-
p++;
|
290
|
+
p++; // Read past letter we escaped.
|
287
291
|
}
|
288
292
|
}
|
289
|
-
*dest_len = d - dest;
|
290
|
-
return true;
|
291
|
-
}
|
292
293
|
|
293
|
-
|
294
|
-
// CUnescapeInternal()
|
295
|
-
//
|
296
|
-
// Same as above but uses a std::string for output. 'source' and 'dest'
|
297
|
-
// may be the same.
|
298
|
-
// ----------------------------------------------------------------------
|
299
|
-
bool CUnescapeInternal(absl::string_view source, bool leave_nulls_escaped,
|
300
|
-
absl::Nonnull<std::string*> dest,
|
301
|
-
absl::Nullable<std::string*> error) {
|
302
|
-
strings_internal::STLStringResizeUninitialized(dest, source.size());
|
303
|
-
|
304
|
-
ptrdiff_t dest_size;
|
305
|
-
if (!CUnescapeInternal(source,
|
306
|
-
leave_nulls_escaped,
|
307
|
-
&(*dest)[0],
|
308
|
-
&dest_size,
|
309
|
-
error)) {
|
310
|
-
return false;
|
311
|
-
}
|
312
|
-
dest->erase(static_cast<size_t>(dest_size));
|
294
|
+
dst->erase(d);
|
313
295
|
return true;
|
314
296
|
}
|
315
297
|
|
@@ -450,7 +432,7 @@ inline size_t CEscapedLength(absl::string_view src) {
|
|
450
432
|
}
|
451
433
|
|
452
434
|
void CEscapeAndAppendInternal(absl::string_view src,
|
453
|
-
|
435
|
+
std::string* absl_nonnull dest) {
|
454
436
|
size_t escaped_len = CEscapedLength(src);
|
455
437
|
if (escaped_len == src.size()) {
|
456
438
|
dest->append(src.data(), src.size());
|
@@ -479,10 +461,10 @@ void CEscapeAndAppendInternal(absl::string_view src,
|
|
479
461
|
|
480
462
|
// Reverses the mapping in Base64EscapeInternal; see that method's
|
481
463
|
// documentation for details of the mapping.
|
482
|
-
bool Base64UnescapeInternal(
|
483
|
-
|
464
|
+
bool Base64UnescapeInternal(const char* absl_nullable src_param, size_t szsrc,
|
465
|
+
char* absl_nullable dest, size_t szdest,
|
484
466
|
const std::array<signed char, 256>& unbase64,
|
485
|
-
|
467
|
+
size_t* absl_nonnull len) {
|
486
468
|
static const char kPad64Equals = '=';
|
487
469
|
static const char kPad64Dot = '.';
|
488
470
|
|
@@ -818,8 +800,8 @@ constexpr std::array<signed char, 256> kUnWebSafeBase64 = {
|
|
818
800
|
/* clang-format on */
|
819
801
|
|
820
802
|
template <typename String>
|
821
|
-
bool Base64UnescapeInternal(
|
822
|
-
|
803
|
+
bool Base64UnescapeInternal(const char* absl_nullable src, size_t slen,
|
804
|
+
String* absl_nonnull dest,
|
823
805
|
const std::array<signed char, 256>& unbase64) {
|
824
806
|
// Determine the size of the output string. Base64 encodes every 3 bytes into
|
825
807
|
// 4 characters. Any leftover chars are added directly for good measure.
|
@@ -888,7 +870,7 @@ constexpr std::array<signed char, 256> kHexValueStrict = {
|
|
888
870
|
// or a string. This works because we use the [] operator to access
|
889
871
|
// individual characters at a time.
|
890
872
|
template <typename T>
|
891
|
-
void HexStringToBytesInternal(
|
873
|
+
void HexStringToBytesInternal(const char* absl_nullable from, T to,
|
892
874
|
size_t num) {
|
893
875
|
for (size_t i = 0; i < num; i++) {
|
894
876
|
to[i] = static_cast<char>(kHexValueLenient[from[i * 2] & 0xFF] << 4) +
|
@@ -899,7 +881,7 @@ void HexStringToBytesInternal(absl::Nullable<const char*> from, T to,
|
|
899
881
|
// This is a templated function so that T can be either a char* or a
|
900
882
|
// std::string.
|
901
883
|
template <typename T>
|
902
|
-
void BytesToHexStringInternal(
|
884
|
+
void BytesToHexStringInternal(const unsigned char* absl_nullable src, T dest,
|
903
885
|
size_t num) {
|
904
886
|
auto dest_ptr = &dest[0];
|
905
887
|
for (auto src_ptr = src; src_ptr != (src + num); ++src_ptr, dest_ptr += 2) {
|
@@ -915,8 +897,8 @@ void BytesToHexStringInternal(absl::Nullable<const unsigned char*> src, T dest,
|
|
915
897
|
//
|
916
898
|
// See CUnescapeInternal() for implementation details.
|
917
899
|
// ----------------------------------------------------------------------
|
918
|
-
bool CUnescape(absl::string_view source,
|
919
|
-
|
900
|
+
bool CUnescape(absl::string_view source, std::string* absl_nonnull dest,
|
901
|
+
std::string* absl_nullable error) {
|
920
902
|
return CUnescapeInternal(source, kUnescapeNulls, dest, error);
|
921
903
|
}
|
922
904
|
|
@@ -938,23 +920,23 @@ std::string Utf8SafeCHexEscape(absl::string_view src) {
|
|
938
920
|
return CEscapeInternal(src, true, true);
|
939
921
|
}
|
940
922
|
|
941
|
-
bool Base64Unescape(absl::string_view src,
|
923
|
+
bool Base64Unescape(absl::string_view src, std::string* absl_nonnull dest) {
|
942
924
|
return Base64UnescapeInternal(src.data(), src.size(), dest, kUnBase64);
|
943
925
|
}
|
944
926
|
|
945
927
|
bool WebSafeBase64Unescape(absl::string_view src,
|
946
|
-
|
928
|
+
std::string* absl_nonnull dest) {
|
947
929
|
return Base64UnescapeInternal(src.data(), src.size(), dest, kUnWebSafeBase64);
|
948
930
|
}
|
949
931
|
|
950
|
-
void Base64Escape(absl::string_view src,
|
932
|
+
void Base64Escape(absl::string_view src, std::string* absl_nonnull dest) {
|
951
933
|
strings_internal::Base64EscapeInternal(
|
952
934
|
reinterpret_cast<const unsigned char*>(src.data()), src.size(), dest,
|
953
935
|
true, strings_internal::kBase64Chars);
|
954
936
|
}
|
955
937
|
|
956
938
|
void WebSafeBase64Escape(absl::string_view src,
|
957
|
-
|
939
|
+
std::string* absl_nonnull dest) {
|
958
940
|
strings_internal::Base64EscapeInternal(
|
959
941
|
reinterpret_cast<const unsigned char*>(src.data()), src.size(), dest,
|
960
942
|
false, strings_internal::kWebSafeBase64Chars);
|
@@ -976,8 +958,7 @@ std::string WebSafeBase64Escape(absl::string_view src) {
|
|
976
958
|
return dest;
|
977
959
|
}
|
978
960
|
|
979
|
-
bool HexStringToBytes(absl::string_view hex,
|
980
|
-
absl::Nonnull<std::string*> bytes) {
|
961
|
+
bool HexStringToBytes(absl::string_view hex, std::string* absl_nonnull bytes) {
|
981
962
|
std::string output;
|
982
963
|
|
983
964
|
size_t num_bytes = hex.size() / 2;
|
@@ -71,12 +71,12 @@ ABSL_NAMESPACE_BEGIN
|
|
71
71
|
// ...
|
72
72
|
// }
|
73
73
|
// EXPECT_EQ(unescaped_s, "foo\rbar\nbaz\t");
|
74
|
-
bool CUnescape(absl::string_view source,
|
75
|
-
|
74
|
+
bool CUnescape(absl::string_view source, std::string* absl_nonnull dest,
|
75
|
+
std::string* absl_nullable error);
|
76
76
|
|
77
77
|
// Overload of `CUnescape()` with no error reporting.
|
78
78
|
inline bool CUnescape(absl::string_view source,
|
79
|
-
|
79
|
+
std::string* absl_nonnull dest) {
|
80
80
|
return CUnescape(source, dest, nullptr);
|
81
81
|
}
|
82
82
|
|
@@ -126,7 +126,7 @@ std::string Utf8SafeCHexEscape(absl::string_view src);
|
|
126
126
|
// Encodes a `src` string into a base64-encoded 'dest' string with padding
|
127
127
|
// characters. This function conforms with RFC 4648 section 4 (base64) and RFC
|
128
128
|
// 2045.
|
129
|
-
void Base64Escape(absl::string_view src,
|
129
|
+
void Base64Escape(absl::string_view src, std::string* absl_nonnull dest);
|
130
130
|
std::string Base64Escape(absl::string_view src);
|
131
131
|
|
132
132
|
// WebSafeBase64Escape()
|
@@ -134,8 +134,7 @@ std::string Base64Escape(absl::string_view src);
|
|
134
134
|
// Encodes a `src` string into a base64 string, like Base64Escape() does, but
|
135
135
|
// outputs '-' instead of '+' and '_' instead of '/', and does not pad 'dest'.
|
136
136
|
// This function conforms with RFC 4648 section 5 (base64url).
|
137
|
-
void WebSafeBase64Escape(absl::string_view src,
|
138
|
-
absl::Nonnull<std::string*> dest);
|
137
|
+
void WebSafeBase64Escape(absl::string_view src, std::string* absl_nonnull dest);
|
139
138
|
std::string WebSafeBase64Escape(absl::string_view src);
|
140
139
|
|
141
140
|
// Base64Unescape()
|
@@ -145,7 +144,7 @@ std::string WebSafeBase64Escape(absl::string_view src);
|
|
145
144
|
// `src` contains invalid characters, `dest` is cleared and returns `false`.
|
146
145
|
// If padding is included (note that `Base64Escape()` does produce it), it must
|
147
146
|
// be correct. In the padding, '=' and '.' are treated identically.
|
148
|
-
bool Base64Unescape(absl::string_view src,
|
147
|
+
bool Base64Unescape(absl::string_view src, std::string* absl_nonnull dest);
|
149
148
|
|
150
149
|
// WebSafeBase64Unescape()
|
151
150
|
//
|
@@ -155,7 +154,7 @@ bool Base64Unescape(absl::string_view src, absl::Nonnull<std::string*> dest);
|
|
155
154
|
// included (note that `WebSafeBase64Escape()` does not produce it), it must be
|
156
155
|
// correct. In the padding, '=' and '.' are treated identically.
|
157
156
|
bool WebSafeBase64Unescape(absl::string_view src,
|
158
|
-
|
157
|
+
std::string* absl_nonnull dest);
|
159
158
|
|
160
159
|
// HexStringToBytes()
|
161
160
|
//
|
@@ -163,8 +162,8 @@ bool WebSafeBase64Unescape(absl::string_view src,
|
|
163
162
|
// output string. If `hex` does not consist of valid hexadecimal data, this
|
164
163
|
// function returns false and leaves `bytes` in an unspecified state. Returns
|
165
164
|
// true on success.
|
166
|
-
|
167
|
-
|
165
|
+
[[nodiscard]] bool HexStringToBytes(absl::string_view hex,
|
166
|
+
std::string* absl_nonnull bytes);
|
168
167
|
|
169
168
|
// HexStringToBytes()
|
170
169
|
//
|
@@ -279,7 +279,7 @@ int BigUnsigned<max_words>::ReadDigits(const char* begin, const char* end,
|
|
279
279
|
// Either way, [begin, decimal_point) will contain the set of dropped digits
|
280
280
|
// that require an exponent adjustment.
|
281
281
|
const char* decimal_point = std::find(begin, end, '.');
|
282
|
-
exponent_adjust += (decimal_point - begin);
|
282
|
+
exponent_adjust += static_cast<int>(decimal_point - begin);
|
283
283
|
}
|
284
284
|
return exponent_adjust;
|
285
285
|
}
|
@@ -25,7 +25,6 @@
|
|
25
25
|
#include "absl/base/attributes.h"
|
26
26
|
#include "absl/base/config.h"
|
27
27
|
#include "absl/base/internal/endian.h"
|
28
|
-
#include "absl/base/internal/invoke.h"
|
29
28
|
#include "absl/base/macros.h"
|
30
29
|
#include "absl/base/nullability.h"
|
31
30
|
#include "absl/base/optimization.h"
|
@@ -358,16 +357,15 @@ struct CordRepExternal : public CordRep {
|
|
358
357
|
struct Rank0 {};
|
359
358
|
struct Rank1 : Rank0 {};
|
360
359
|
|
361
|
-
template <typename Releaser,
|
362
|
-
|
360
|
+
template <typename Releaser,
|
361
|
+
typename = ::std::invoke_result_t<Releaser, absl::string_view>>
|
363
362
|
void InvokeReleaser(Rank1, Releaser&& releaser, absl::string_view data) {
|
364
|
-
::
|
363
|
+
::std::invoke(std::forward<Releaser>(releaser), data);
|
365
364
|
}
|
366
365
|
|
367
|
-
template <typename Releaser,
|
368
|
-
typename = ::absl::base_internal::invoke_result_t<Releaser>>
|
366
|
+
template <typename Releaser, typename = ::std::invoke_result_t<Releaser>>
|
369
367
|
void InvokeReleaser(Rank0, Releaser&& releaser, absl::string_view) {
|
370
|
-
::
|
368
|
+
::std::invoke(std::forward<Releaser>(releaser));
|
371
369
|
}
|
372
370
|
|
373
371
|
// We use CompressedTuple so that we can benefit from EBCO.
|
@@ -637,7 +635,7 @@ class InlineData {
|
|
637
635
|
poison();
|
638
636
|
}
|
639
637
|
|
640
|
-
void CopyInlineToString(
|
638
|
+
void CopyInlineToString(std::string* dst) const {
|
641
639
|
assert(!is_tree());
|
642
640
|
// As Cord can store only 15 bytes it is smaller than std::string's
|
643
641
|
// small string optimization buffer size. Therefore we will always trigger
|
@@ -36,10 +36,6 @@ namespace absl {
|
|
36
36
|
ABSL_NAMESPACE_BEGIN
|
37
37
|
namespace cord_internal {
|
38
38
|
|
39
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
40
|
-
constexpr size_t CordRepBtree::kMaxCapacity;
|
41
|
-
#endif
|
42
|
-
|
43
39
|
namespace {
|
44
40
|
|
45
41
|
using NodeStack = CordRepBtree * [CordRepBtree::kMaxDepth];
|
@@ -34,10 +34,6 @@ namespace absl {
|
|
34
34
|
ABSL_NAMESPACE_BEGIN
|
35
35
|
namespace cord_internal {
|
36
36
|
|
37
|
-
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
38
|
-
constexpr size_t CordzInfo::kMaxStackDepth;
|
39
|
-
#endif
|
40
|
-
|
41
37
|
ABSL_CONST_INIT CordzInfo::List CordzInfo::global_list_{absl::kConstInit};
|
42
38
|
|
43
39
|
namespace {
|