grpc 1.41.0 → 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.

Files changed (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +77 -64
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -56,6 +56,10 @@ namespace re2 {
56
56
  // Controls whether the DFA should bail out early if the NFA would be faster.
57
57
  static bool dfa_should_bail_when_slow = true;
58
58
 
59
+ void Prog::TESTING_ONLY_set_dfa_should_bail_when_slow(bool b) {
60
+ dfa_should_bail_when_slow = b;
61
+ }
62
+
59
63
  // Changing this to true compiles in prints that trace execution of the DFA.
60
64
  // Generates a lot of output -- only useful for debugging.
61
65
  static const bool ExtraDebug = false;
@@ -167,6 +171,9 @@ class DFA {
167
171
  typedef std::unordered_set<State*, StateHash, StateEqual> StateSet;
168
172
 
169
173
  private:
174
+ // Make it easier to swap in a scalable reader-writer mutex.
175
+ using CacheMutex = Mutex;
176
+
170
177
  enum {
171
178
  // Indices into start_ for unanchored searches.
172
179
  // Add kStartAnchored for anchored searches.
@@ -280,10 +287,10 @@ class DFA {
280
287
  // The generic search loop, inlined to create specialized versions.
281
288
  // cache_mutex_.r <= L < mutex_
282
289
  // Might unlock and relock cache_mutex_ via params->cache_lock.
283
- inline bool InlinedSearchLoop(SearchParams* params,
284
- bool can_prefix_accel,
285
- bool want_earliest_match,
286
- bool run_forward);
290
+ template <bool can_prefix_accel,
291
+ bool want_earliest_match,
292
+ bool run_forward>
293
+ inline bool InlinedSearchLoop(SearchParams* params);
287
294
 
288
295
  // The specialized versions of InlinedSearchLoop. The three letters
289
296
  // at the ends of the name denote the true/false values used as the
@@ -305,13 +312,6 @@ class DFA {
305
312
  // Might unlock and relock cache_mutex_ via params->cache_lock.
306
313
  bool FastSearchLoop(SearchParams* params);
307
314
 
308
- // For debugging, a slow search loop that calls InlinedSearchLoop
309
- // directly -- because the booleans passed are not constants, the
310
- // loop is not specialized like the SearchFFF etc. versions, so it
311
- // runs much more slowly. Useful only for debugging.
312
- // cache_mutex_.r <= L < mutex_
313
- // Might unlock and relock cache_mutex_ via params->cache_lock.
314
- bool SlowSearchLoop(SearchParams* params);
315
315
 
316
316
  // Looks up bytes in bytemap_ but handles case c == kByteEndText too.
317
317
  int ByteMap(int c) {
@@ -338,7 +338,7 @@ class DFA {
338
338
  // while holding cache_mutex_ for writing, to avoid interrupting other
339
339
  // readers. Any State* pointers are only valid while cache_mutex_
340
340
  // is held.
341
- Mutex cache_mutex_;
341
+ CacheMutex cache_mutex_;
342
342
  int64_t mem_budget_; // Total memory budget for all States.
343
343
  int64_t state_budget_; // Amount of memory remaining for new States.
344
344
  StateSet state_cache_; // All States computed so far.
@@ -1113,7 +1113,7 @@ DFA::State* DFA::RunStateOnByte(State* state, int c) {
1113
1113
 
1114
1114
  class DFA::RWLocker {
1115
1115
  public:
1116
- explicit RWLocker(Mutex* mu);
1116
+ explicit RWLocker(CacheMutex* mu);
1117
1117
  ~RWLocker();
1118
1118
 
1119
1119
  // If the lock is only held for reading right now,
@@ -1123,14 +1123,14 @@ class DFA::RWLocker {
1123
1123
  void LockForWriting();
1124
1124
 
1125
1125
  private:
1126
- Mutex* mu_;
1126
+ CacheMutex* mu_;
1127
1127
  bool writing_;
1128
1128
 
1129
1129
  RWLocker(const RWLocker&) = delete;
1130
1130
  RWLocker& operator=(const RWLocker&) = delete;
1131
1131
  };
1132
1132
 
1133
- DFA::RWLocker::RWLocker(Mutex* mu) : mu_(mu), writing_(false) {
1133
+ DFA::RWLocker::RWLocker(CacheMutex* mu) : mu_(mu), writing_(false) {
1134
1134
  mu_->ReaderLock();
1135
1135
  }
1136
1136
 
@@ -1321,10 +1321,10 @@ DFA::State* DFA::StateSaver::Restore() {
1321
1321
  // The bools are equal to the same-named variables in params, but
1322
1322
  // making them function arguments lets the inliner specialize
1323
1323
  // this function to each combination (see two paragraphs above).
1324
- inline bool DFA::InlinedSearchLoop(SearchParams* params,
1325
- bool can_prefix_accel,
1326
- bool want_earliest_match,
1327
- bool run_forward) {
1324
+ template <bool can_prefix_accel,
1325
+ bool want_earliest_match,
1326
+ bool run_forward>
1327
+ inline bool DFA::InlinedSearchLoop(SearchParams* params) {
1328
1328
  State* start = params->start;
1329
1329
  const uint8_t* bp = BytePtr(params->text.data()); // start of text
1330
1330
  const uint8_t* p = bp; // text scanning point
@@ -1549,36 +1549,28 @@ inline bool DFA::InlinedSearchLoop(SearchParams* params,
1549
1549
 
1550
1550
  // Inline specializations of the general loop.
1551
1551
  bool DFA::SearchFFF(SearchParams* params) {
1552
- return InlinedSearchLoop(params, 0, 0, 0);
1552
+ return InlinedSearchLoop<false, false, false>(params);
1553
1553
  }
1554
1554
  bool DFA::SearchFFT(SearchParams* params) {
1555
- return InlinedSearchLoop(params, 0, 0, 1);
1555
+ return InlinedSearchLoop<false, false, true>(params);
1556
1556
  }
1557
1557
  bool DFA::SearchFTF(SearchParams* params) {
1558
- return InlinedSearchLoop(params, 0, 1, 0);
1558
+ return InlinedSearchLoop<false, true, false>(params);
1559
1559
  }
1560
1560
  bool DFA::SearchFTT(SearchParams* params) {
1561
- return InlinedSearchLoop(params, 0, 1, 1);
1561
+ return InlinedSearchLoop<false, true, true>(params);
1562
1562
  }
1563
1563
  bool DFA::SearchTFF(SearchParams* params) {
1564
- return InlinedSearchLoop(params, 1, 0, 0);
1564
+ return InlinedSearchLoop<true, false, false>(params);
1565
1565
  }
1566
1566
  bool DFA::SearchTFT(SearchParams* params) {
1567
- return InlinedSearchLoop(params, 1, 0, 1);
1567
+ return InlinedSearchLoop<true, false, true>(params);
1568
1568
  }
1569
1569
  bool DFA::SearchTTF(SearchParams* params) {
1570
- return InlinedSearchLoop(params, 1, 1, 0);
1570
+ return InlinedSearchLoop<true, true, false>(params);
1571
1571
  }
1572
1572
  bool DFA::SearchTTT(SearchParams* params) {
1573
- return InlinedSearchLoop(params, 1, 1, 1);
1574
- }
1575
-
1576
- // For debugging, calls the general code directly.
1577
- bool DFA::SlowSearchLoop(SearchParams* params) {
1578
- return InlinedSearchLoop(params,
1579
- params->can_prefix_accel,
1580
- params->want_earliest_match,
1581
- params->run_forward);
1573
+ return InlinedSearchLoop<true, true, true>(params);
1582
1574
  }
1583
1575
 
1584
1576
  // For performance, calls the appropriate specialized version
@@ -1978,10 +1970,6 @@ int Prog::BuildEntireDFA(MatchKind kind, const DFAStateCallback& cb) {
1978
1970
  return GetDFA(kind)->BuildAllStates(cb);
1979
1971
  }
1980
1972
 
1981
- void Prog::TEST_dfa_should_bail_when_slow(bool b) {
1982
- dfa_should_bail_when_slow = b;
1983
- }
1984
-
1985
1973
  // Computes min and max for matching string.
1986
1974
  // Won't return strings bigger than maxlen.
1987
1975
  bool DFA::PossibleMatchRange(std::string* min, std::string* max, int maxlen) {
@@ -6,6 +6,7 @@
6
6
 
7
7
  #include <stddef.h>
8
8
  #include <string>
9
+ #include <utility>
9
10
 
10
11
  #include "util/util.h"
11
12
  #include "util/logging.h"
@@ -27,7 +28,22 @@ FilteredRE2::FilteredRE2(int min_atom_len)
27
28
  FilteredRE2::~FilteredRE2() {
28
29
  for (size_t i = 0; i < re2_vec_.size(); i++)
29
30
  delete re2_vec_[i];
30
- delete prefilter_tree_;
31
+ }
32
+
33
+ FilteredRE2::FilteredRE2(FilteredRE2&& other)
34
+ : re2_vec_(std::move(other.re2_vec_)),
35
+ compiled_(other.compiled_),
36
+ prefilter_tree_(std::move(other.prefilter_tree_)) {
37
+ other.re2_vec_.clear();
38
+ other.re2_vec_.shrink_to_fit();
39
+ other.compiled_ = false;
40
+ other.prefilter_tree_.reset(new PrefilterTree());
41
+ }
42
+
43
+ FilteredRE2& FilteredRE2::operator=(FilteredRE2&& other) {
44
+ this->~FilteredRE2();
45
+ (void) new (this) FilteredRE2(std::move(other));
46
+ return *this;
31
47
  }
32
48
 
33
49
  RE2::ErrorCode FilteredRE2::Add(const StringPiece& pattern,
@@ -38,7 +54,7 @@ RE2::ErrorCode FilteredRE2::Add(const StringPiece& pattern,
38
54
  if (!re->ok()) {
39
55
  if (options.log_errors()) {
40
56
  LOG(ERROR) << "Couldn't compile regular expression, skipping: "
41
- << re << " due to error " << re->error();
57
+ << pattern << " due to error " << re->error();
42
58
  }
43
59
  delete re;
44
60
  } else {
@@ -21,6 +21,7 @@
21
21
  // or AllMatches with a vector of indices of strings that were found
22
22
  // in the text to get the actual regexp matches.
23
23
 
24
+ #include <memory>
24
25
  #include <string>
25
26
  #include <vector>
26
27
 
@@ -36,12 +37,19 @@ class FilteredRE2 {
36
37
  explicit FilteredRE2(int min_atom_len);
37
38
  ~FilteredRE2();
38
39
 
40
+ // Not copyable.
41
+ FilteredRE2(const FilteredRE2&) = delete;
42
+ FilteredRE2& operator=(const FilteredRE2&) = delete;
43
+ // Movable.
44
+ FilteredRE2(FilteredRE2&& other);
45
+ FilteredRE2& operator=(FilteredRE2&& other);
46
+
39
47
  // Uses RE2 constructor to create a RE2 object (re). Returns
40
48
  // re->error_code(). If error_code is other than NoError, then re is
41
49
  // deleted and not added to re2_vec_.
42
50
  RE2::ErrorCode Add(const StringPiece& pattern,
43
51
  const RE2::Options& options,
44
- int *id);
52
+ int* id);
45
53
 
46
54
  // Prepares the regexps added by Add for filtering. Returns a set
47
55
  // of strings that the caller should check for in candidate texts.
@@ -98,10 +106,7 @@ class FilteredRE2 {
98
106
  bool compiled_;
99
107
 
100
108
  // An AND-OR tree of string atoms used for filtering regexps.
101
- PrefilterTree* prefilter_tree_;
102
-
103
- FilteredRE2(const FilteredRE2&) = delete;
104
- FilteredRE2& operator=(const FilteredRE2&) = delete;
109
+ std::unique_ptr<PrefilterTree> prefilter_tree_;
105
110
  };
106
111
 
107
112
  } // namespace re2
@@ -600,7 +600,7 @@ bool NFA::Search(const StringPiece& text, const StringPiece& const_context,
600
600
  // by simply not continuing the loop.
601
601
  // This complements the special case in NFA::Step().
602
602
  if (p == NULL) {
603
- (void)Step(runq, nextq, p < etext_ ? p[0] & 0xFF : -1, context, p);
603
+ (void) Step(runq, nextq, -1, context, p);
604
604
  DCHECK_EQ(runq->size(), 0);
605
605
  using std::swap;
606
606
  swap(nextq, runq);
@@ -44,12 +44,12 @@
44
44
 
45
45
  namespace re2 {
46
46
 
47
- // Reduce the maximum repeat count by an order of magnitude when fuzzing.
48
- #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
49
- static const int kMaxRepeat = 100;
50
- #else
51
- static const int kMaxRepeat = 1000;
52
- #endif
47
+ // Controls the maximum repeat count permitted by the parser.
48
+ static int maximum_repeat_count = 1000;
49
+
50
+ void Regexp::FUZZING_ONLY_set_maximum_repeat_count(int i) {
51
+ maximum_repeat_count = i;
52
+ }
53
53
 
54
54
  // Regular expression parse state.
55
55
  // The list of parsed regexps so far is maintained as a vector of
@@ -568,7 +568,9 @@ int RepetitionWalker::ShortVisit(Regexp* re, int parent_arg) {
568
568
  bool Regexp::ParseState::PushRepetition(int min, int max,
569
569
  const StringPiece& s,
570
570
  bool nongreedy) {
571
- if ((max != -1 && max < min) || min > kMaxRepeat || max > kMaxRepeat) {
571
+ if ((max != -1 && max < min) ||
572
+ min > maximum_repeat_count ||
573
+ max > maximum_repeat_count) {
572
574
  status_->set_code(kRegexpRepeatSize);
573
575
  status_->set_error_arg(s);
574
576
  return false;
@@ -591,7 +593,7 @@ bool Regexp::ParseState::PushRepetition(int min, int max,
591
593
  stacktop_ = re;
592
594
  if (min >= 2 || max >= 2) {
593
595
  RepetitionWalker w;
594
- if (w.Walk(stacktop_, kMaxRepeat) == 0) {
596
+ if (w.Walk(stacktop_, maximum_repeat_count) == 0) {
595
597
  status_->set_code(kRegexpRepeatSize);
596
598
  status_->set_error_arg(s);
597
599
  return false;
@@ -685,7 +687,7 @@ bool Regexp::ParseState::DoRightParen() {
685
687
  if ((r1 = stacktop_) == NULL ||
686
688
  (r2 = r1->down_) == NULL ||
687
689
  r2->op() != kLeftParen) {
688
- status_->set_code(kRegexpMissingParen);
690
+ status_->set_code(kRegexpUnexpectedParen);
689
691
  status_->set_error_arg(whole_regexp_);
690
692
  return false;
691
693
  }
@@ -1407,13 +1409,15 @@ static int StringPieceToRune(Rune *r, StringPiece *sp, RegexpStatus* status) {
1407
1409
  }
1408
1410
  }
1409
1411
 
1410
- status->set_code(kRegexpBadUTF8);
1411
- status->set_error_arg(StringPiece());
1412
+ if (status != NULL) {
1413
+ status->set_code(kRegexpBadUTF8);
1414
+ status->set_error_arg(StringPiece());
1415
+ }
1412
1416
  return -1;
1413
1417
  }
1414
1418
 
1415
- // Return whether name is valid UTF-8.
1416
- // If not, set status to kRegexpBadUTF8.
1419
+ // Returns whether name is valid UTF-8.
1420
+ // If not, sets status to kRegexpBadUTF8.
1417
1421
  static bool IsValidUTF8(const StringPiece& s, RegexpStatus* status) {
1418
1422
  StringPiece t = s;
1419
1423
  Rune r;
@@ -2011,19 +2015,34 @@ bool Regexp::ParseState::ParseCharClass(StringPiece* s,
2011
2015
  return true;
2012
2016
  }
2013
2017
 
2014
- // Is this a valid capture name? [A-Za-z0-9_]+
2015
- // PCRE limits names to 32 bytes.
2016
- // Python rejects names starting with digits.
2017
- // We don't enforce either of those.
2018
+ // Returns whether name is a valid capture name.
2018
2019
  static bool IsValidCaptureName(const StringPiece& name) {
2019
2020
  if (name.empty())
2020
2021
  return false;
2021
- for (size_t i = 0; i < name.size(); i++) {
2022
- int c = name[i];
2023
- if (('0' <= c && c <= '9') ||
2024
- ('a' <= c && c <= 'z') ||
2025
- ('A' <= c && c <= 'Z') ||
2026
- c == '_')
2022
+
2023
+ // Historically, we effectively used [0-9A-Za-z_]+ to validate; that
2024
+ // followed Python 2 except for not restricting the first character.
2025
+ // As of Python 3, Unicode characters beyond ASCII are also allowed;
2026
+ // accordingly, we permit the Lu, Ll, Lt, Lm, Lo, Nl, Mn, Mc, Nd and
2027
+ // Pc categories, but again without restricting the first character.
2028
+ // Also, Unicode normalization (e.g. NFKC) isn't performed: Python 3
2029
+ // performs it for identifiers, but seemingly not for capture names;
2030
+ // if they start doing that for capture names, we won't follow suit.
2031
+ static const CharClass* const cc = []() {
2032
+ CharClassBuilder ccb;
2033
+ for (StringPiece group :
2034
+ {"Lu", "Ll", "Lt", "Lm", "Lo", "Nl", "Mn", "Mc", "Nd", "Pc"})
2035
+ AddUGroup(&ccb, LookupGroup(group, unicode_groups, num_unicode_groups),
2036
+ +1, Regexp::NoParseFlags);
2037
+ return ccb.GetCharClass();
2038
+ }();
2039
+
2040
+ StringPiece t = name;
2041
+ Rune r;
2042
+ while (!t.empty()) {
2043
+ if (StringPieceToRune(&r, &t, NULL) < 0)
2044
+ return false;
2045
+ if (cc->Contains(r))
2027
2046
  continue;
2028
2047
  return false;
2029
2048
  }
@@ -20,12 +20,12 @@ static const URange16 code3[] = { /* \w */
20
20
  { 0x61, 0x7a },
21
21
  };
22
22
  const UGroup perl_groups[] = {
23
- { "\\d", +1, code1, 1 },
24
- { "\\D", -1, code1, 1 },
25
- { "\\s", +1, code2, 3 },
26
- { "\\S", -1, code2, 3 },
27
- { "\\w", +1, code3, 4 },
28
- { "\\W", -1, code3, 4 },
23
+ { "\\d", +1, code1, 1, 0, 0 },
24
+ { "\\D", -1, code1, 1, 0, 0 },
25
+ { "\\s", +1, code2, 3, 0, 0 },
26
+ { "\\S", -1, code2, 3, 0, 0 },
27
+ { "\\w", +1, code3, 4, 0, 0 },
28
+ { "\\W", -1, code3, 4, 0, 0 },
29
29
  };
30
30
  const int num_perl_groups = 6;
31
31
  static const URange16 code4[] = { /* [:alnum:] */
@@ -85,34 +85,34 @@ static const URange16 code17[] = { /* [:xdigit:] */
85
85
  { 0x61, 0x66 },
86
86
  };
87
87
  const UGroup posix_groups[] = {
88
- { "[:alnum:]", +1, code4, 3 },
89
- { "[:^alnum:]", -1, code4, 3 },
90
- { "[:alpha:]", +1, code5, 2 },
91
- { "[:^alpha:]", -1, code5, 2 },
92
- { "[:ascii:]", +1, code6, 1 },
93
- { "[:^ascii:]", -1, code6, 1 },
94
- { "[:blank:]", +1, code7, 2 },
95
- { "[:^blank:]", -1, code7, 2 },
96
- { "[:cntrl:]", +1, code8, 2 },
97
- { "[:^cntrl:]", -1, code8, 2 },
98
- { "[:digit:]", +1, code9, 1 },
99
- { "[:^digit:]", -1, code9, 1 },
100
- { "[:graph:]", +1, code10, 1 },
101
- { "[:^graph:]", -1, code10, 1 },
102
- { "[:lower:]", +1, code11, 1 },
103
- { "[:^lower:]", -1, code11, 1 },
104
- { "[:print:]", +1, code12, 1 },
105
- { "[:^print:]", -1, code12, 1 },
106
- { "[:punct:]", +1, code13, 4 },
107
- { "[:^punct:]", -1, code13, 4 },
108
- { "[:space:]", +1, code14, 2 },
109
- { "[:^space:]", -1, code14, 2 },
110
- { "[:upper:]", +1, code15, 1 },
111
- { "[:^upper:]", -1, code15, 1 },
112
- { "[:word:]", +1, code16, 4 },
113
- { "[:^word:]", -1, code16, 4 },
114
- { "[:xdigit:]", +1, code17, 3 },
115
- { "[:^xdigit:]", -1, code17, 3 },
88
+ { "[:alnum:]", +1, code4, 3, 0, 0 },
89
+ { "[:^alnum:]", -1, code4, 3, 0, 0 },
90
+ { "[:alpha:]", +1, code5, 2, 0, 0 },
91
+ { "[:^alpha:]", -1, code5, 2, 0, 0 },
92
+ { "[:ascii:]", +1, code6, 1, 0, 0 },
93
+ { "[:^ascii:]", -1, code6, 1, 0, 0 },
94
+ { "[:blank:]", +1, code7, 2, 0, 0 },
95
+ { "[:^blank:]", -1, code7, 2, 0, 0 },
96
+ { "[:cntrl:]", +1, code8, 2, 0, 0 },
97
+ { "[:^cntrl:]", -1, code8, 2, 0, 0 },
98
+ { "[:digit:]", +1, code9, 1, 0, 0 },
99
+ { "[:^digit:]", -1, code9, 1, 0, 0 },
100
+ { "[:graph:]", +1, code10, 1, 0, 0 },
101
+ { "[:^graph:]", -1, code10, 1, 0, 0 },
102
+ { "[:lower:]", +1, code11, 1, 0, 0 },
103
+ { "[:^lower:]", -1, code11, 1, 0, 0 },
104
+ { "[:print:]", +1, code12, 1, 0, 0 },
105
+ { "[:^print:]", -1, code12, 1, 0, 0 },
106
+ { "[:punct:]", +1, code13, 4, 0, 0 },
107
+ { "[:^punct:]", -1, code13, 4, 0, 0 },
108
+ { "[:space:]", +1, code14, 2, 0, 0 },
109
+ { "[:^space:]", -1, code14, 2, 0, 0 },
110
+ { "[:upper:]", +1, code15, 1, 0, 0 },
111
+ { "[:^upper:]", -1, code15, 1, 0, 0 },
112
+ { "[:word:]", +1, code16, 4, 0, 0 },
113
+ { "[:^word:]", -1, code16, 4, 0, 0 },
114
+ { "[:xdigit:]", +1, code17, 3, 0, 0 },
115
+ { "[:^xdigit:]", -1, code17, 3, 0, 0 },
116
116
  };
117
117
  const int num_posix_groups = 28;
118
118
 
@@ -648,14 +648,15 @@ Prefilter* Prefilter::FromRegexp(Regexp* re) {
648
648
  return NULL;
649
649
 
650
650
  Regexp* simple = re->Simplify();
651
- Prefilter::Info *info = BuildInfo(simple);
651
+ if (simple == NULL)
652
+ return NULL;
652
653
 
654
+ Prefilter::Info* info = BuildInfo(simple);
653
655
  simple->Decref();
654
656
  if (info == NULL)
655
657
  return NULL;
656
658
 
657
659
  Prefilter* m = info->TakeMatch();
658
-
659
660
  delete info;
660
661
  return m;
661
662
  }