grpc 1.21.0 → 1.32.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 (1843) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2516 -19950
  3. data/etc/roots.pem +44 -100
  4. data/include/grpc/grpc.h +3 -1
  5. data/include/grpc/grpc_security.h +238 -55
  6. data/include/grpc/grpc_security_constants.h +32 -1
  7. data/include/grpc/impl/codegen/README.md +22 -0
  8. data/include/grpc/impl/codegen/gpr_types.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +61 -13
  10. data/include/grpc/impl/codegen/port_platform.h +74 -30
  11. data/include/grpc/impl/codegen/sync.h +5 -3
  12. data/include/grpc/impl/codegen/sync_abseil.h +36 -0
  13. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  14. data/include/grpc/module.modulemap +25 -37
  15. data/include/grpc/slice.h +2 -2
  16. data/include/grpc/support/alloc.h +0 -16
  17. data/include/grpc/support/sync_abseil.h +26 -0
  18. data/src/core/ext/filters/client_channel/backend_metric.cc +84 -0
  19. data/src/core/ext/filters/client_channel/backend_metric.h +36 -0
  20. data/src/core/ext/filters/client_channel/backup_poller.cc +10 -8
  21. data/src/core/ext/filters/client_channel/backup_poller.h +5 -2
  22. data/src/core/ext/filters/client_channel/channel_connectivity.cc +18 -4
  23. data/src/core/ext/filters/client_channel/client_channel.cc +1516 -742
  24. data/src/core/ext/filters/client_channel/client_channel.h +25 -9
  25. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +50 -139
  26. data/src/core/ext/filters/client_channel/client_channel_channelz.h +15 -39
  27. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  28. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -9
  29. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -13
  30. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  31. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  32. data/src/core/ext/filters/client_channel/connector.h +42 -39
  33. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +34 -12
  34. data/src/core/ext/filters/client_channel/health/health_check_client.cc +75 -115
  35. data/src/core/ext/filters/client_channel/health/health_check_client.h +8 -16
  36. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +75 -46
  37. data/src/core/ext/filters/client_channel/http_proxy.cc +126 -120
  38. data/src/core/ext/filters/client_channel/http_proxy.h +5 -1
  39. data/src/core/ext/filters/client_channel/lb_policy.cc +35 -35
  40. data/src/core/ext/filters/client_channel/lb_policy.h +225 -152
  41. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  42. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  43. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +299 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +83 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -25
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +635 -734
  47. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +7 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +76 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +37 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -2
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +33 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +4 -3
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +7 -6
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +157 -271
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +42 -58
  56. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +113 -166
  57. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +890 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +61 -101
  59. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +116 -260
  60. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +744 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +423 -0
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +946 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +537 -0
  64. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +3 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +1141 -0
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +6 -9
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +53 -77
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +3 -3
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +8 -8
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +14 -34
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +46 -79
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +23 -17
  74. data/src/core/ext/filters/client_channel/resolver.cc +6 -9
  75. data/src/core/ext/filters/client_channel/resolver.h +19 -37
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +156 -130
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +74 -39
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +15 -21
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +33 -33
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +16 -13
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +476 -129
  82. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +231 -193
  83. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +6 -4
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -6
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -2
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -2
  87. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +73 -48
  88. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +165 -116
  89. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +8 -7
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +45 -29
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +536 -0
  92. data/src/core/ext/filters/client_channel/resolver_factory.h +11 -11
  93. data/src/core/ext/filters/client_channel/resolver_registry.cc +39 -24
  94. data/src/core/ext/filters/client_channel/resolver_registry.h +17 -12
  95. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +251 -313
  96. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +28 -26
  97. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +100 -325
  98. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +48 -53
  99. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  100. data/src/core/ext/filters/client_channel/retry_throttle.h +2 -6
  101. data/src/core/ext/filters/client_channel/server_address.cc +40 -14
  102. data/src/core/ext/filters/client_channel/server_address.h +45 -15
  103. data/src/core/ext/filters/client_channel/service_config.cc +143 -253
  104. data/src/core/ext/filters/client_channel/service_config.h +47 -131
  105. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  106. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  107. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  108. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  109. data/src/core/ext/filters/client_channel/subchannel.cc +436 -288
  110. data/src/core/ext/filters/client_channel/subchannel.h +181 -53
  111. data/src/core/ext/filters/client_channel/subchannel_interface.h +94 -0
  112. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  113. data/src/core/ext/filters/client_idle/client_idle_filter.cc +440 -0
  114. data/src/core/ext/filters/deadline/deadline_filter.cc +30 -28
  115. data/src/core/ext/filters/http/client/http_client_filter.cc +66 -70
  116. data/src/core/ext/filters/http/client_authority_filter.cc +21 -21
  117. data/src/core/ext/filters/http/http_filters_plugin.cc +28 -12
  118. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +335 -301
  119. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +399 -0
  120. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +31 -0
  121. data/src/core/ext/filters/http/server/http_server_filter.cc +66 -39
  122. data/src/core/ext/filters/max_age/max_age_filter.cc +72 -60
  123. data/src/core/ext/filters/message_size/message_size_filter.cc +116 -144
  124. data/src/core/ext/filters/message_size/message_size_filter.h +12 -6
  125. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +19 -17
  126. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +193 -171
  127. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +48 -1
  128. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +29 -25
  129. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +44 -64
  130. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +384 -305
  131. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  132. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  133. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  134. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  135. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  136. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +640 -560
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
  138. data/src/core/ext/transport/chttp2/transport/context_list.cc +5 -3
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -31
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +28 -38
  141. data/src/core/ext/transport/chttp2/transport/frame_data.cc +45 -54
  142. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -9
  143. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -7
  145. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  146. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -13
  147. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +9 -3
  148. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +13 -12
  149. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  150. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  151. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  152. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +531 -348
  153. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +26 -15
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +213 -143
  155. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +11 -4
  156. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +41 -196
  157. data/src/core/ext/transport/chttp2/transport/hpack_table.h +62 -18
  158. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  159. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  160. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -1
  161. data/src/core/ext/transport/chttp2/transport/internal.h +64 -47
  162. data/src/core/ext/transport/chttp2/transport/parsing.cc +148 -162
  163. data/src/core/ext/transport/chttp2/transport/stream_map.cc +28 -18
  164. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  165. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -30
  166. data/src/core/ext/transport/inproc/inproc_transport.cc +164 -114
  167. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +17 -0
  168. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +29 -0
  169. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +27 -0
  170. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +53 -0
  171. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  172. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  173. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  174. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  175. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  176. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  177. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +35 -0
  178. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  179. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +55 -0
  180. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +35 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +36 -0
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +34 -0
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  203. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  204. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +33 -0
  210. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  217. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  218. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  222. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  223. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  224. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  225. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  226. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  229. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  233. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  235. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  237. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +27 -0
  238. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  239. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +25 -0
  240. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  241. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  242. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  243. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +30 -0
  244. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  245. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +30 -0
  246. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  247. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  248. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  249. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +29 -0
  250. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  251. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +27 -0
  252. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  253. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  254. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  255. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  256. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  257. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  258. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  259. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  260. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  261. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  262. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  263. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  265. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  266. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  267. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  268. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  269. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +17 -0
  270. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +35 -0
  271. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +40 -0
  272. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  273. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +51 -0
  274. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  275. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +30 -0
  276. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  277. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +17 -0
  278. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +29 -0
  279. data/src/core/ext/upb-generated/google/api/annotations.upb.c +18 -0
  280. data/src/core/ext/upb-generated/google/api/annotations.upb.h +29 -0
  281. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  282. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  283. data/src/core/ext/upb-generated/google/api/http.upb.c +66 -0
  284. data/src/core/ext/upb-generated/google/api/http.upb.h +191 -0
  285. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +27 -0
  286. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +57 -0
  287. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +486 -0
  288. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1722 -0
  289. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +27 -0
  290. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +57 -0
  291. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +22 -0
  292. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +49 -0
  293. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +79 -0
  294. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +194 -0
  295. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +27 -0
  296. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +57 -0
  297. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +106 -0
  298. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +237 -0
  299. data/src/core/ext/upb-generated/google/rpc/status.upb.c +33 -0
  300. data/src/core/ext/upb-generated/google/rpc/status.upb.h +74 -0
  301. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +49 -0
  302. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +113 -0
  303. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +212 -0
  304. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +672 -0
  305. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +42 -0
  306. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +110 -0
  307. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +36 -0
  308. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +83 -0
  309. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +141 -0
  310. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +396 -0
  311. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +48 -0
  312. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +103 -0
  313. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +17 -0
  314. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +29 -0
  315. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  316. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -0
  317. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  318. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  319. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +58 -0
  320. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +117 -0
  321. data/src/core/ext/upb-generated/validate/validate.upb.c +448 -0
  322. data/src/core/ext/upb-generated/validate/validate.upb.h +2074 -0
  323. data/src/core/ext/xds/xds_api.cc +2388 -0
  324. data/src/core/ext/xds/xds_api.h +360 -0
  325. data/src/core/ext/xds/xds_bootstrap.cc +373 -0
  326. data/src/core/ext/xds/xds_bootstrap.h +93 -0
  327. data/src/core/ext/xds/xds_channel.h +46 -0
  328. data/src/core/ext/xds/xds_channel_args.h +26 -0
  329. data/src/core/ext/xds/xds_channel_secure.cc +103 -0
  330. data/src/core/ext/xds/xds_client.cc +2114 -0
  331. data/src/core/ext/xds/xds_client.h +276 -0
  332. data/src/core/ext/xds/xds_client_stats.cc +115 -0
  333. data/src/core/ext/xds/xds_client_stats.h +211 -0
  334. data/src/core/lib/avl/avl.cc +1 -1
  335. data/src/core/lib/channel/channel_args.cc +52 -14
  336. data/src/core/lib/channel/channel_args.h +41 -3
  337. data/src/core/lib/channel/channel_stack.cc +1 -1
  338. data/src/core/lib/channel/channel_stack.h +38 -18
  339. data/src/core/lib/channel/channel_trace.cc +32 -45
  340. data/src/core/lib/channel/channel_trace.h +3 -3
  341. data/src/core/lib/channel/channelz.cc +377 -318
  342. data/src/core/lib/channel/channelz.h +128 -90
  343. data/src/core/lib/channel/channelz_registry.cc +123 -178
  344. data/src/core/lib/channel/channelz_registry.h +14 -32
  345. data/src/core/lib/channel/connected_channel.cc +28 -25
  346. data/src/core/lib/channel/context.h +2 -2
  347. data/src/core/lib/channel/handshaker.cc +18 -14
  348. data/src/core/lib/channel/handshaker.h +7 -6
  349. data/src/core/lib/channel/handshaker_factory.h +1 -3
  350. data/src/core/lib/channel/handshaker_registry.cc +9 -21
  351. data/src/core/lib/channel/handshaker_registry.h +3 -3
  352. data/src/core/lib/channel/status_util.cc +2 -3
  353. data/src/core/lib/compression/compression.cc +16 -11
  354. data/src/core/lib/compression/compression_args.cc +13 -6
  355. data/src/core/lib/compression/compression_args.h +3 -2
  356. data/src/core/lib/compression/compression_internal.cc +15 -11
  357. data/src/core/lib/compression/compression_internal.h +9 -1
  358. data/src/core/lib/compression/message_compress.cc +8 -3
  359. data/src/core/lib/compression/stream_compression.cc +3 -2
  360. data/src/core/lib/compression/stream_compression.h +2 -2
  361. data/src/core/lib/compression/stream_compression_gzip.cc +9 -9
  362. data/src/core/lib/compression/stream_compression_identity.cc +5 -7
  363. data/src/core/lib/debug/stats.cc +21 -27
  364. data/src/core/lib/debug/stats.h +3 -1
  365. data/src/core/lib/debug/trace.h +3 -2
  366. data/src/core/lib/gpr/alloc.cc +4 -29
  367. data/src/core/lib/gpr/cpu_linux.cc +1 -1
  368. data/src/core/lib/gpr/env.h +1 -1
  369. data/src/core/lib/gpr/env_linux.cc +10 -21
  370. data/src/core/lib/gpr/env_posix.cc +0 -5
  371. data/src/core/lib/gpr/log_linux.cc +8 -10
  372. data/src/core/lib/gpr/log_posix.cc +7 -9
  373. data/src/core/lib/gpr/spinlock.h +2 -3
  374. data/src/core/lib/gpr/string.cc +25 -36
  375. data/src/core/lib/gpr/string.h +11 -19
  376. data/src/core/lib/gpr/sync_abseil.cc +116 -0
  377. data/src/core/lib/gpr/sync_posix.cc +10 -142
  378. data/src/core/lib/gpr/sync_windows.cc +4 -2
  379. data/src/core/lib/gpr/time.cc +4 -0
  380. data/src/core/lib/gpr/time_posix.cc +1 -1
  381. data/src/core/lib/gpr/time_precise.cc +123 -36
  382. data/src/core/lib/gpr/time_precise.h +37 -0
  383. data/src/core/lib/gprpp/arena.cc +3 -3
  384. data/src/core/lib/gprpp/arena.h +2 -3
  385. data/src/core/lib/gprpp/atomic.h +10 -6
  386. data/src/core/lib/gprpp/debug_location.h +3 -2
  387. data/src/core/lib/gprpp/fork.cc +19 -26
  388. data/src/core/lib/gprpp/fork.h +18 -3
  389. data/src/core/lib/gprpp/global_config.h +9 -0
  390. data/src/core/lib/gprpp/global_config_custom.h +1 -1
  391. data/src/core/lib/gprpp/global_config_env.cc +15 -13
  392. data/src/core/lib/gprpp/global_config_env.h +2 -2
  393. data/src/core/lib/gprpp/host_port.cc +112 -0
  394. data/src/core/lib/gprpp/host_port.h +56 -0
  395. data/src/core/lib/gprpp/map.h +16 -382
  396. data/src/core/lib/gprpp/memory.h +12 -75
  397. data/src/core/lib/gprpp/mpscq.cc +108 -0
  398. data/src/core/lib/gprpp/mpscq.h +98 -0
  399. data/src/core/lib/gprpp/orphanable.h +9 -14
  400. data/src/core/lib/gprpp/ref_counted.h +97 -44
  401. data/src/core/lib/gprpp/ref_counted_ptr.h +8 -1
  402. data/src/core/lib/gprpp/sync.h +9 -0
  403. data/src/core/lib/gprpp/thd.h +13 -6
  404. data/src/core/lib/gprpp/thd_posix.cc +29 -3
  405. data/src/core/lib/gprpp/thd_windows.cc +12 -4
  406. data/src/core/lib/http/format_request.cc +46 -65
  407. data/src/core/lib/http/httpcli.cc +18 -16
  408. data/src/core/lib/http/httpcli.h +2 -3
  409. data/src/core/lib/http/httpcli_security_connector.cc +27 -21
  410. data/src/core/lib/http/parser.cc +1 -1
  411. data/src/core/lib/http/parser.h +2 -3
  412. data/src/core/lib/iomgr/buffer_list.cc +45 -40
  413. data/src/core/lib/iomgr/buffer_list.h +27 -27
  414. data/src/core/lib/iomgr/call_combiner.cc +12 -12
  415. data/src/core/lib/iomgr/call_combiner.h +10 -8
  416. data/src/core/lib/iomgr/cfstream_handle.cc +11 -3
  417. data/src/core/lib/iomgr/cfstream_handle.h +11 -3
  418. data/src/core/lib/iomgr/closure.h +43 -141
  419. data/src/core/lib/iomgr/combiner.cc +46 -90
  420. data/src/core/lib/iomgr/combiner.h +30 -8
  421. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  422. data/src/core/lib/iomgr/endpoint.cc +5 -1
  423. data/src/core/lib/iomgr/endpoint.h +7 -3
  424. data/src/core/lib/iomgr/endpoint_cfstream.cc +41 -19
  425. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  426. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -11
  427. data/src/core/lib/iomgr/error.cc +26 -19
  428. data/src/core/lib/iomgr/error.h +15 -8
  429. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  430. data/src/core/lib/iomgr/error_internal.h +1 -1
  431. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  432. data/src/core/lib/iomgr/ev_apple.h +43 -0
  433. data/src/core/lib/iomgr/ev_epoll1_linux.cc +48 -47
  434. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -94
  435. data/src/core/lib/iomgr/ev_poll_posix.cc +42 -26
  436. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  437. data/src/core/lib/iomgr/ev_posix.h +3 -2
  438. data/src/core/lib/iomgr/ev_windows.cc +2 -2
  439. data/src/core/lib/iomgr/exec_ctx.cc +78 -21
  440. data/src/core/lib/iomgr/exec_ctx.h +27 -7
  441. data/src/core/lib/iomgr/executor.cc +25 -41
  442. data/src/core/lib/iomgr/executor.h +7 -7
  443. data/src/core/lib/iomgr/executor/mpmcqueue.cc +183 -0
  444. data/src/core/lib/iomgr/executor/mpmcqueue.h +175 -0
  445. data/src/core/lib/iomgr/executor/threadpool.cc +137 -0
  446. data/src/core/lib/iomgr/executor/threadpool.h +149 -0
  447. data/src/core/lib/iomgr/fork_posix.cc +8 -2
  448. data/src/core/lib/iomgr/iocp_windows.cc +2 -2
  449. data/src/core/lib/iomgr/iomgr.cc +4 -4
  450. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  451. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +87 -9
  452. data/src/core/lib/iomgr/iomgr_uv.cc +3 -0
  453. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  454. data/src/core/lib/iomgr/load_file.cc +1 -0
  455. data/src/core/lib/iomgr/lockfree_event.cc +13 -12
  456. data/src/core/lib/iomgr/parse_address.cc +238 -0
  457. data/src/core/lib/iomgr/parse_address.h +53 -0
  458. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +87 -0
  459. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +88 -0
  460. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  461. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  462. data/src/core/lib/iomgr/pollset_uv.h +32 -0
  463. data/src/core/lib/iomgr/pollset_windows.cc +16 -2
  464. data/src/core/lib/iomgr/port.h +10 -22
  465. data/src/core/lib/iomgr/python_util.h +46 -0
  466. data/src/core/lib/iomgr/resolve_address.h +4 -6
  467. data/src/core/lib/iomgr/resolve_address_custom.cc +49 -68
  468. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  469. data/src/core/lib/iomgr/resolve_address_posix.cc +20 -24
  470. data/src/core/lib/iomgr/resolve_address_windows.cc +22 -35
  471. data/src/core/lib/iomgr/resource_quota.cc +120 -110
  472. data/src/core/lib/iomgr/resource_quota.h +13 -9
  473. data/src/core/lib/iomgr/sockaddr_utils.cc +33 -36
  474. data/src/core/lib/iomgr/sockaddr_utils.h +12 -16
  475. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  476. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  477. data/src/core/lib/iomgr/socket_utils_common_posix.cc +140 -82
  478. data/src/core/lib/iomgr/socket_utils_posix.h +19 -0
  479. data/src/core/lib/iomgr/socket_windows.cc +6 -7
  480. data/src/core/lib/iomgr/socket_windows.h +1 -1
  481. data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -21
  482. data/src/core/lib/iomgr/tcp_client_custom.cc +9 -11
  483. data/src/core/lib/iomgr/tcp_client_posix.cc +47 -59
  484. data/src/core/lib/iomgr/tcp_client_posix.h +6 -6
  485. data/src/core/lib/iomgr/tcp_client_windows.cc +12 -13
  486. data/src/core/lib/iomgr/tcp_custom.cc +58 -36
  487. data/src/core/lib/iomgr/tcp_custom.h +4 -1
  488. data/src/core/lib/iomgr/tcp_posix.cc +697 -124
  489. data/src/core/lib/iomgr/tcp_server.cc +8 -4
  490. data/src/core/lib/iomgr/tcp_server.h +28 -5
  491. data/src/core/lib/iomgr/tcp_server_custom.cc +46 -41
  492. data/src/core/lib/iomgr/tcp_server_posix.cc +102 -46
  493. data/src/core/lib/iomgr/tcp_server_utils_posix.h +6 -4
  494. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -19
  495. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +10 -18
  496. data/src/core/lib/iomgr/tcp_server_windows.cc +33 -29
  497. data/src/core/lib/iomgr/tcp_uv.cc +8 -8
  498. data/src/core/lib/iomgr/tcp_windows.cc +49 -30
  499. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  500. data/src/core/lib/iomgr/timer.h +2 -1
  501. data/src/core/lib/iomgr/timer_custom.cc +7 -5
  502. data/src/core/lib/iomgr/timer_generic.cc +26 -24
  503. data/src/core/lib/iomgr/timer_generic.h +39 -0
  504. data/src/core/lib/iomgr/timer_heap.h +2 -3
  505. data/src/core/lib/iomgr/timer_manager.cc +8 -30
  506. data/src/core/lib/iomgr/timer_manager.h +2 -0
  507. data/src/core/lib/iomgr/udp_server.cc +53 -53
  508. data/src/core/lib/iomgr/udp_server.h +11 -14
  509. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  510. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  511. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  512. data/src/core/lib/iomgr/work_serializer.cc +155 -0
  513. data/src/core/lib/iomgr/work_serializer.h +65 -0
  514. data/src/core/lib/json/json.h +209 -68
  515. data/src/core/lib/json/json_reader.cc +508 -317
  516. data/src/core/lib/json/json_writer.cc +202 -110
  517. data/src/core/lib/profiling/basic_timers.cc +2 -2
  518. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  519. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  520. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  521. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  522. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  523. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  524. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  525. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  526. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  527. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  528. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  529. data/src/core/lib/security/credentials/alts/alts_credentials.cc +10 -7
  530. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  531. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +45 -57
  532. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  533. data/src/core/lib/security/credentials/composite/composite_credentials.cc +26 -6
  534. data/src/core/lib/security/credentials/composite/composite_credentials.h +11 -4
  535. data/src/core/lib/security/credentials/credentials.h +31 -25
  536. data/src/core/lib/security/credentials/fake/fake_credentials.cc +9 -9
  537. data/src/core/lib/security/credentials/fake/fake_credentials.h +6 -1
  538. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  539. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +74 -56
  540. data/src/core/lib/security/credentials/iam/iam_credentials.cc +12 -10
  541. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  542. data/src/core/lib/security/credentials/jwt/json_token.cc +32 -58
  543. data/src/core/lib/security/credentials/jwt/json_token.h +5 -7
  544. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +19 -26
  545. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  546. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +153 -170
  547. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -6
  548. data/src/core/lib/security/credentials/local/local_credentials.cc +3 -3
  549. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +332 -87
  550. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +27 -7
  551. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +31 -15
  552. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +4 -1
  553. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +43 -5
  554. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +12 -2
  555. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +70 -17
  556. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +118 -5
  557. data/src/core/lib/security/credentials/tls/tls_credentials.cc +128 -0
  558. data/src/core/lib/security/credentials/tls/tls_credentials.h +62 -0
  559. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +67 -32
  560. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +5 -0
  561. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +64 -47
  562. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +2 -2
  563. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +9 -5
  564. data/src/core/lib/security/security_connector/local/local_security_connector.cc +42 -16
  565. data/src/core/lib/security/security_connector/security_connector.cc +4 -1
  566. data/src/core/lib/security/security_connector/security_connector.h +22 -20
  567. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +55 -62
  568. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +8 -5
  569. data/src/core/lib/security/security_connector/ssl_utils.cc +150 -53
  570. data/src/core/lib/security/security_connector/ssl_utils.h +41 -17
  571. data/src/core/lib/security/security_connector/ssl_utils_config.cc +32 -0
  572. data/src/core/lib/security/security_connector/ssl_utils_config.h +30 -0
  573. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +606 -0
  574. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +183 -0
  575. data/src/core/lib/security/transport/auth_filters.h +0 -2
  576. data/src/core/lib/security/transport/client_auth_filter.cc +74 -28
  577. data/src/core/lib/security/transport/secure_endpoint.cc +16 -9
  578. data/src/core/lib/security/transport/security_handshaker.cc +103 -43
  579. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  580. data/src/core/lib/security/transport/server_auth_filter.cc +18 -17
  581. data/src/core/lib/security/util/json_util.cc +35 -15
  582. data/src/core/lib/security/util/json_util.h +5 -3
  583. data/src/core/lib/slice/b64.cc +3 -4
  584. data/src/core/lib/slice/b64.h +3 -4
  585. data/src/core/lib/slice/slice.cc +188 -73
  586. data/src/core/lib/slice/slice_buffer.cc +55 -26
  587. data/src/core/lib/slice/slice_intern.cc +164 -64
  588. data/src/core/lib/slice/slice_internal.h +110 -8
  589. data/src/core/lib/slice/slice_string_helpers.cc +10 -1
  590. data/src/core/lib/slice/slice_string_helpers.h +3 -1
  591. data/src/core/lib/slice/slice_utils.h +200 -0
  592. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  593. data/src/core/lib/surface/call.cc +166 -117
  594. data/src/core/lib/surface/call.h +8 -8
  595. data/src/core/lib/surface/call_log_batch.cc +51 -60
  596. data/src/core/lib/surface/channel.cc +188 -137
  597. data/src/core/lib/surface/channel.h +91 -11
  598. data/src/core/lib/surface/channel_ping.cc +3 -4
  599. data/src/core/lib/surface/completion_queue.cc +144 -111
  600. data/src/core/lib/surface/completion_queue.h +6 -3
  601. data/src/core/lib/surface/completion_queue_factory.cc +1 -1
  602. data/src/core/lib/surface/event_string.cc +18 -25
  603. data/src/core/lib/surface/event_string.h +3 -1
  604. data/src/core/lib/surface/init.cc +6 -2
  605. data/src/core/lib/surface/init_secure.cc +2 -2
  606. data/src/core/lib/surface/lame_client.cc +43 -30
  607. data/src/core/lib/surface/server.cc +1275 -1316
  608. data/src/core/lib/surface/server.h +373 -52
  609. data/src/core/lib/surface/validate_metadata.cc +18 -8
  610. data/src/core/lib/surface/validate_metadata.h +13 -2
  611. data/src/core/lib/surface/version.cc +2 -2
  612. data/src/core/lib/transport/authority_override.cc +38 -0
  613. data/src/core/lib/transport/authority_override.h +32 -0
  614. data/src/core/lib/transport/byte_stream.cc +5 -7
  615. data/src/core/lib/transport/byte_stream.h +13 -12
  616. data/src/core/lib/transport/connectivity_state.cc +118 -98
  617. data/src/core/lib/transport/connectivity_state.h +114 -50
  618. data/src/core/lib/transport/error_utils.cc +23 -1
  619. data/src/core/lib/transport/error_utils.h +6 -0
  620. data/src/core/lib/transport/metadata.cc +252 -57
  621. data/src/core/lib/transport/metadata.h +168 -80
  622. data/src/core/lib/transport/metadata_batch.cc +78 -16
  623. data/src/core/lib/transport/metadata_batch.h +40 -3
  624. data/src/core/lib/transport/static_metadata.cc +1169 -495
  625. data/src/core/lib/transport/static_metadata.h +279 -282
  626. data/src/core/lib/transport/status_conversion.cc +7 -15
  627. data/src/core/lib/transport/status_metadata.cc +8 -1
  628. data/src/core/lib/transport/status_metadata.h +18 -0
  629. data/src/core/lib/transport/timeout_encoding.cc +7 -0
  630. data/src/core/lib/transport/timeout_encoding.h +3 -2
  631. data/src/core/lib/transport/transport.cc +14 -13
  632. data/src/core/lib/transport/transport.h +48 -8
  633. data/src/core/lib/transport/transport_op_string.cc +67 -105
  634. data/src/core/lib/uri/uri_parser.cc +30 -35
  635. data/src/core/lib/uri/uri_parser.h +5 -4
  636. data/src/core/plugin_registry/grpc_plugin_registry.cc +36 -4
  637. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  638. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  639. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +414 -120
  640. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  641. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  642. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +1 -1
  643. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +293 -61
  644. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +15 -5
  645. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +5 -0
  646. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +10 -6
  647. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +4 -3
  648. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +76 -48
  649. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +34 -26
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  652. data/src/core/tsi/fake_transport_security.cc +22 -21
  653. data/src/core/tsi/fake_transport_security.h +2 -0
  654. data/src/core/tsi/local_transport_security.cc +8 -6
  655. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -6
  656. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -3
  657. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +11 -9
  658. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -13
  659. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -3
  660. data/src/core/tsi/ssl_transport_security.cc +345 -103
  661. data/src/core/tsi/ssl_transport_security.h +42 -11
  662. data/src/core/tsi/ssl_types.h +0 -2
  663. data/src/core/tsi/transport_security.cc +13 -0
  664. data/src/core/tsi/transport_security.h +6 -9
  665. data/src/core/tsi/transport_security_grpc.cc +7 -0
  666. data/src/core/tsi/transport_security_grpc.h +8 -3
  667. data/src/core/tsi/transport_security_interface.h +20 -3
  668. data/src/ruby/bin/math_pb.rb +5 -5
  669. data/src/ruby/bin/math_services_pb.rb +4 -4
  670. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  671. data/src/ruby/ext/grpc/ext-export.gcc +6 -0
  672. data/src/ruby/ext/grpc/extconf.rb +11 -2
  673. data/src/ruby/ext/grpc/rb_call.c +13 -4
  674. data/src/ruby/ext/grpc/rb_call.h +4 -0
  675. data/src/ruby/ext/grpc/rb_call_credentials.c +61 -13
  676. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  677. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  678. data/src/ruby/ext/grpc/rb_enable_cpp.cc +22 -0
  679. data/src/ruby/ext/grpc/rb_grpc.c +1 -42
  680. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -6
  681. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +28 -13
  682. data/src/ruby/lib/grpc.rb +2 -0
  683. data/src/ruby/lib/grpc/core/status_codes.rb +135 -0
  684. data/src/ruby/lib/grpc/errors.rb +107 -49
  685. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  686. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  687. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  688. data/src/ruby/lib/grpc/generic/interceptors.rb +5 -5
  689. data/src/ruby/lib/grpc/generic/rpc_server.rb +11 -12
  690. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  691. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +9 -4
  692. data/src/ruby/lib/grpc/grpc.rb +1 -1
  693. data/src/ruby/lib/grpc/structs.rb +15 -0
  694. data/src/ruby/lib/grpc/version.rb +1 -1
  695. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  696. data/src/ruby/pb/grpc/health/v1/health_pb.rb +3 -3
  697. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  698. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +1 -1
  699. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -13
  700. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +43 -11
  701. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  702. data/src/ruby/spec/debug_message_spec.rb +134 -0
  703. data/src/ruby/spec/errors_spec.rb +1 -0
  704. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  705. data/src/ruby/spec/generic/service_spec.rb +2 -0
  706. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  707. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto +22 -0
  708. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  709. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +41 -0
  710. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  711. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  712. data/src/ruby/spec/pb/codegen/package_option_spec.rb +79 -29
  713. data/src/ruby/spec/support/services.rb +10 -4
  714. data/src/ruby/spec/testdata/ca.pem +18 -13
  715. data/src/ruby/spec/testdata/client.key +26 -14
  716. data/src/ruby/spec/testdata/client.pem +18 -12
  717. data/src/ruby/spec/testdata/server1.key +26 -14
  718. data/src/ruby/spec/testdata/server1.pem +20 -14
  719. data/src/ruby/spec/user_agent_spec.rb +74 -0
  720. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +159 -0
  721. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  722. data/third_party/abseil-cpp/absl/base/attributes.h +621 -0
  723. data/third_party/abseil-cpp/absl/base/call_once.h +226 -0
  724. data/third_party/abseil-cpp/absl/base/casts.h +184 -0
  725. data/third_party/abseil-cpp/absl/base/config.h +671 -0
  726. data/third_party/abseil-cpp/absl/base/const_init.h +76 -0
  727. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +129 -0
  728. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +389 -0
  729. data/third_party/abseil-cpp/absl/base/internal/atomic_hook.h +200 -0
  730. data/third_party/abseil-cpp/absl/base/internal/bits.h +218 -0
  731. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +107 -0
  732. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +94 -0
  733. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  734. data/third_party/abseil-cpp/absl/base/internal/endian.h +266 -0
  735. data/third_party/abseil-cpp/absl/base/internal/errno_saver.h +43 -0
  736. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  737. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  738. data/third_party/abseil-cpp/absl/base/internal/hide_ptr.h +51 -0
  739. data/third_party/abseil-cpp/absl/base/internal/identity.h +37 -0
  740. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +107 -0
  741. data/third_party/abseil-cpp/absl/base/internal/invoke.h +187 -0
  742. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  743. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  744. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +107 -0
  745. data/third_party/abseil-cpp/absl/base/internal/per_thread_tls.h +52 -0
  746. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +240 -0
  747. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +183 -0
  748. data/third_party/abseil-cpp/absl/base/internal/scheduling_mode.h +58 -0
  749. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +233 -0
  750. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +243 -0
  751. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +35 -0
  752. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +66 -0
  753. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +46 -0
  754. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.cc +81 -0
  755. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +93 -0
  756. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +37 -0
  757. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +416 -0
  758. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +66 -0
  759. data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +271 -0
  760. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +152 -0
  761. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +259 -0
  762. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +108 -0
  763. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.h +75 -0
  764. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +66 -0
  765. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +158 -0
  766. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +140 -0
  767. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +124 -0
  768. data/third_party/abseil-cpp/absl/base/log_severity.cc +27 -0
  769. data/third_party/abseil-cpp/absl/base/log_severity.h +121 -0
  770. data/third_party/abseil-cpp/absl/base/macros.h +220 -0
  771. data/third_party/abseil-cpp/absl/base/optimization.h +181 -0
  772. data/third_party/abseil-cpp/absl/base/options.h +211 -0
  773. data/third_party/abseil-cpp/absl/base/policy_checks.h +111 -0
  774. data/third_party/abseil-cpp/absl/base/port.h +26 -0
  775. data/third_party/abseil-cpp/absl/base/thread_annotations.h +280 -0
  776. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  777. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  778. data/third_party/abseil-cpp/absl/container/inlined_vector.h +848 -0
  779. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  780. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +265 -0
  781. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  782. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  783. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  784. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  785. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  786. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  787. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  788. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  789. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +892 -0
  790. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  791. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  792. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  793. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  794. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  795. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  796. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  797. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  798. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  799. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  800. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  801. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  802. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  803. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  804. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  805. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  806. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  807. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  808. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  809. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  810. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  811. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  812. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  813. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  814. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  815. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  816. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  817. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  818. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  819. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  820. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  821. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  822. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  823. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  824. data/third_party/abseil-cpp/absl/memory/memory.h +695 -0
  825. data/third_party/abseil-cpp/absl/meta/type_traits.h +759 -0
  826. data/third_party/abseil-cpp/absl/numeric/int128.cc +404 -0
  827. data/third_party/abseil-cpp/absl/numeric/int128.h +1091 -0
  828. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +302 -0
  829. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +308 -0
  830. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  831. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  832. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  833. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  834. data/third_party/abseil-cpp/absl/strings/ascii.cc +200 -0
  835. data/third_party/abseil-cpp/absl/strings/ascii.h +242 -0
  836. data/third_party/abseil-cpp/absl/strings/charconv.cc +984 -0
  837. data/third_party/abseil-cpp/absl/strings/charconv.h +119 -0
  838. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  839. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  840. data/third_party/abseil-cpp/absl/strings/escaping.cc +949 -0
  841. data/third_party/abseil-cpp/absl/strings/escaping.h +164 -0
  842. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +156 -0
  843. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +359 -0
  844. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +423 -0
  845. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +504 -0
  846. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.h +99 -0
  847. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  848. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +180 -0
  849. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +58 -0
  850. data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +112 -0
  851. data/third_party/abseil-cpp/absl/strings/internal/memutil.h +148 -0
  852. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +36 -0
  853. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +89 -0
  854. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +73 -0
  855. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +248 -0
  856. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +388 -0
  857. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +432 -0
  858. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +245 -0
  859. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +209 -0
  860. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +326 -0
  861. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +51 -0
  862. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +415 -0
  863. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +493 -0
  864. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +23 -0
  865. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +72 -0
  866. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +104 -0
  867. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +334 -0
  868. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +333 -0
  869. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +314 -0
  870. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +455 -0
  871. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +53 -0
  872. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +50 -0
  873. data/third_party/abseil-cpp/absl/strings/match.cc +40 -0
  874. data/third_party/abseil-cpp/absl/strings/match.h +90 -0
  875. data/third_party/abseil-cpp/absl/strings/numbers.cc +965 -0
  876. data/third_party/abseil-cpp/absl/strings/numbers.h +266 -0
  877. data/third_party/abseil-cpp/absl/strings/str_cat.cc +246 -0
  878. data/third_party/abseil-cpp/absl/strings/str_cat.h +408 -0
  879. data/third_party/abseil-cpp/absl/strings/str_format.h +537 -0
  880. data/third_party/abseil-cpp/absl/strings/str_join.h +293 -0
  881. data/third_party/abseil-cpp/absl/strings/str_replace.cc +82 -0
  882. data/third_party/abseil-cpp/absl/strings/str_replace.h +219 -0
  883. data/third_party/abseil-cpp/absl/strings/str_split.cc +139 -0
  884. data/third_party/abseil-cpp/absl/strings/str_split.h +513 -0
  885. data/third_party/abseil-cpp/absl/strings/string_view.cc +235 -0
  886. data/third_party/abseil-cpp/absl/strings/string_view.h +622 -0
  887. data/third_party/abseil-cpp/absl/strings/strip.h +91 -0
  888. data/third_party/abseil-cpp/absl/strings/substitute.cc +171 -0
  889. data/third_party/abseil-cpp/absl/strings/substitute.h +693 -0
  890. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  891. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  892. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  893. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  894. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  895. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  896. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  897. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  898. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  899. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  900. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  901. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  902. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  903. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  904. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  905. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  906. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  907. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  908. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  909. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  910. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  911. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  912. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  913. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  914. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  915. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  916. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  917. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  918. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  919. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  920. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  921. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  922. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  923. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  924. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  925. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  926. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  927. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  928. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  929. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  930. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  931. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  932. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  933. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  934. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  935. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  936. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  937. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  938. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  939. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +48 -0
  940. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +78 -0
  941. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  942. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  943. data/third_party/abseil-cpp/absl/types/internal/optional.h +396 -0
  944. data/third_party/abseil-cpp/absl/types/internal/span.h +128 -0
  945. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  946. data/third_party/abseil-cpp/absl/types/optional.h +776 -0
  947. data/third_party/abseil-cpp/absl/types/span.h +713 -0
  948. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  949. data/third_party/abseil-cpp/absl/utility/utility.h +350 -0
  950. data/third_party/boringssl-with-bazel/err_data.c +1451 -0
  951. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +271 -0
  952. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +123 -0
  953. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +93 -0
  954. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +87 -0
  955. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +195 -0
  956. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_gentm.c +0 -0
  957. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +88 -0
  958. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +420 -0
  959. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +305 -0
  960. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +286 -0
  961. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_octet.c +0 -0
  962. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_print.c +0 -0
  963. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +313 -0
  964. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +212 -0
  965. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +151 -0
  966. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utctm.c +0 -0
  967. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/a_utf8.c +0 -0
  968. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +446 -0
  969. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_locl.h +0 -0
  970. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/asn1_par.c +0 -0
  971. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +105 -0
  972. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +93 -0
  973. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +97 -0
  974. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +91 -0
  975. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_dec.c +0 -0
  976. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +664 -0
  977. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_fre.c +0 -0
  978. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_new.c +0 -0
  979. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_typ.c +0 -0
  980. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/tasn_utl.c +0 -0
  981. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/asn1/time_support.c +0 -0
  982. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +466 -0
  983. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +700 -0
  984. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/bio_mem.c +0 -0
  985. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +545 -0
  986. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +279 -0
  987. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +317 -0
  988. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/hexdump.c +0 -0
  989. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/internal.h +0 -0
  990. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +488 -0
  991. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bio/printf.c +0 -0
  992. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +206 -0
  993. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +118 -0
  994. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bn_extra/bn_asn1.c +0 -0
  995. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +470 -0
  996. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +172 -0
  997. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/bytestring/asn1_compat.c +0 -0
  998. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +265 -0
  999. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +719 -0
  1000. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +688 -0
  1001. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +96 -0
  1002. data/third_party/boringssl-with-bazel/src/crypto/bytestring/unicode.c +155 -0
  1003. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +184 -0
  1004. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +45 -0
  1005. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +143 -0
  1006. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +152 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesccm.c +447 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +283 -0
  1009. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +891 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +418 -0
  1011. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_null.c +0 -0
  1012. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc2.c +0 -0
  1013. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/e_rc4.c +0 -0
  1014. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +688 -0
  1015. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cipher_extra/internal.h +0 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +492 -0
  1017. data/third_party/boringssl-with-bazel/src/crypto/cmac/cmac.c +278 -0
  1018. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +810 -0
  1019. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/conf_def.h +0 -0
  1020. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/conf/internal.h +0 -0
  1021. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-fuchsia.c +0 -0
  1022. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-aarch64-linux.c +0 -0
  1023. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +220 -0
  1024. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.h +201 -0
  1025. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-arm.c +0 -0
  1026. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +291 -0
  1027. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/cpu-ppc64le.c +0 -0
  1028. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +226 -0
  1029. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +2159 -0
  1030. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +7872 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +146 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +539 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/dh/check.c +217 -0
  1034. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +533 -0
  1035. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/dh_asn1.c +0 -0
  1036. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dh/params.c +0 -0
  1037. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/digest_extra/digest_extra.c +0 -0
  1038. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +980 -0
  1039. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/dsa/dsa_asn1.c +0 -0
  1040. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +574 -0
  1041. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_derive.c +95 -0
  1042. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +385 -0
  1043. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +56 -0
  1044. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +124 -0
  1045. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +267 -0
  1046. data/third_party/boringssl-with-bazel/src/crypto/engine/engine.c +99 -0
  1047. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +850 -0
  1048. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +58 -0
  1049. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/digestsign.c +0 -0
  1050. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +443 -0
  1051. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +547 -0
  1052. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +484 -0
  1053. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +269 -0
  1054. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +273 -0
  1055. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +286 -0
  1056. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +255 -0
  1057. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +104 -0
  1058. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +221 -0
  1059. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +648 -0
  1060. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +194 -0
  1061. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +110 -0
  1062. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +248 -0
  1063. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/pbkdf.c +0 -0
  1064. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/print.c +0 -0
  1065. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +213 -0
  1066. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/evp/sign.c +0 -0
  1067. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/ex_data.c +0 -0
  1068. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +108 -0
  1069. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1282 -0
  1070. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +238 -0
  1071. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +236 -0
  1072. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +122 -0
  1073. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +263 -0
  1074. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/add.c +0 -0
  1075. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/asm/x86_64-gcc.c +0 -0
  1076. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +445 -0
  1077. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/bytes.c +0 -0
  1078. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +200 -0
  1079. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +236 -0
  1080. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +886 -0
  1081. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +87 -0
  1082. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +1288 -0
  1083. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +378 -0
  1084. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  1085. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/generic.c +0 -0
  1086. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +704 -0
  1087. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/jacobi.c +0 -0
  1088. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +502 -0
  1089. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +186 -0
  1090. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +749 -0
  1091. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +1068 -0
  1092. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +341 -0
  1093. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +226 -0
  1094. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +104 -0
  1095. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +364 -0
  1096. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/bn/sqrt.c +0 -0
  1097. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/cipher/aead.c +0 -0
  1098. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +620 -0
  1099. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +1302 -0
  1100. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_des.c +237 -0
  1101. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +128 -0
  1102. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +89 -0
  1103. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/des.c +0 -0
  1104. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/des/internal.h +0 -0
  1105. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +271 -0
  1106. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +296 -0
  1107. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/digest/internal.h +0 -0
  1108. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +268 -0
  1109. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +1252 -0
  1110. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +465 -0
  1111. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +524 -0
  1112. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +100 -0
  1113. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +776 -0
  1114. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +328 -0
  1115. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +1180 -0
  1116. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9497 -0
  1117. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +633 -0
  1118. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.h +153 -0
  1119. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +740 -0
  1120. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  1121. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +175 -0
  1122. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +357 -0
  1123. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +270 -0
  1124. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +255 -0
  1125. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +270 -0
  1126. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  1127. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +328 -0
  1128. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/fips_shared_support.c +32 -0
  1129. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/hmac/hmac.c +0 -0
  1130. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +29 -0
  1131. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +256 -0
  1132. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/internal.h +37 -0
  1133. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +301 -0
  1134. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +167 -0
  1135. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +202 -0
  1136. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +200 -0
  1137. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +729 -0
  1138. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +304 -0
  1139. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +441 -0
  1140. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +96 -0
  1141. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/modes/polyval.c +0 -0
  1142. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +202 -0
  1143. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  1144. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  1145. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  1146. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +163 -0
  1147. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +378 -0
  1148. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +391 -0
  1149. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +243 -0
  1150. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +127 -0
  1151. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +695 -0
  1152. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +898 -0
  1153. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +1358 -0
  1154. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +716 -0
  1155. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +53 -0
  1156. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/sha/sha1-altivec.c +0 -0
  1157. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +371 -0
  1158. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +343 -0
  1159. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +544 -0
  1160. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/internal.h +0 -0
  1161. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/fipsmodule/tls/kdf.c +0 -0
  1162. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/hkdf/hkdf.c +0 -0
  1163. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  1164. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  1165. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +2100 -0
  1166. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +61 -0
  1167. data/third_party/boringssl-with-bazel/src/crypto/internal.h +834 -0
  1168. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +348 -0
  1169. data/third_party/boringssl-with-bazel/src/crypto/mem.c +373 -0
  1170. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +549 -0
  1171. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +11585 -0
  1172. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/obj/obj_xref.c +0 -0
  1173. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +261 -0
  1174. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +360 -0
  1175. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +777 -0
  1176. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +87 -0
  1177. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +257 -0
  1178. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +218 -0
  1179. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_x509.c +0 -0
  1180. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pem/pem_xaux.c +0 -0
  1181. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/pkcs7/internal.h +0 -0
  1182. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +159 -0
  1183. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +385 -0
  1184. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +138 -0
  1185. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.c +316 -0
  1186. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +530 -0
  1187. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1336 -0
  1188. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/poly1305/internal.h +0 -0
  1189. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +318 -0
  1190. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +305 -0
  1191. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +856 -0
  1192. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +45 -0
  1193. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +220 -0
  1194. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +52 -0
  1195. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/forkunsafe.c +0 -0
  1196. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +30 -0
  1197. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rand_extra/rand_extra.c +0 -0
  1198. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +69 -0
  1199. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rc4/rc4.c +0 -0
  1200. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/refcount_c11.c +0 -0
  1201. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +53 -0
  1202. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/rsa_extra/rsa_asn1.c +0 -0
  1203. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_print.c +22 -0
  1204. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +82 -0
  1205. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +431 -0
  1206. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/thread.c +0 -0
  1207. data/third_party/boringssl-with-bazel/src/crypto/thread_none.c +59 -0
  1208. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +210 -0
  1209. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +260 -0
  1210. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +249 -0
  1211. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1227 -0
  1212. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +682 -0
  1213. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_digest.c +0 -0
  1214. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/a_sign.c +0 -0
  1215. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +653 -0
  1216. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +114 -0
  1217. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +161 -0
  1218. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +842 -0
  1219. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +458 -0
  1220. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +275 -0
  1221. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/charmap.h +0 -0
  1222. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/i2d_pr.c +0 -0
  1223. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/internal.h +0 -0
  1224. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/rsa_pss.c +0 -0
  1225. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +125 -0
  1226. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +244 -0
  1227. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +544 -0
  1228. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/t_x509a.c +0 -0
  1229. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/vpm_int.h +0 -0
  1230. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +90 -0
  1231. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_att.c +0 -0
  1232. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +483 -0
  1233. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_d2.c +0 -0
  1234. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +103 -0
  1235. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_ext.c +0 -0
  1236. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +834 -0
  1237. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +198 -0
  1238. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +116 -0
  1239. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +351 -0
  1240. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +226 -0
  1241. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +329 -0
  1242. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +204 -0
  1243. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509_v3.c +0 -0
  1244. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +2506 -0
  1245. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +671 -0
  1246. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +235 -0
  1247. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +389 -0
  1248. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509rset.c +0 -0
  1249. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x509spki.c +0 -0
  1250. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_algor.c +0 -0
  1251. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +399 -0
  1252. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_attrib.c +0 -0
  1253. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +563 -0
  1254. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_exten.c +0 -0
  1255. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_info.c +0 -0
  1256. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_name.c +0 -0
  1257. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_pkey.c +0 -0
  1258. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +214 -0
  1259. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_req.c +0 -0
  1260. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +89 -0
  1261. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_spki.c +0 -0
  1262. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_val.c +0 -0
  1263. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +356 -0
  1264. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509/x_x509a.c +0 -0
  1265. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +141 -0
  1266. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +61 -0
  1267. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +286 -0
  1268. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_data.c +0 -0
  1269. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_int.h +0 -0
  1270. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_lib.c +0 -0
  1271. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/pcy_map.c +0 -0
  1272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +189 -0
  1273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +842 -0
  1274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +207 -0
  1275. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_akeya.c +0 -0
  1276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +629 -0
  1277. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bcons.c +0 -0
  1278. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_bitst.c +0 -0
  1279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +463 -0
  1280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +503 -0
  1281. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_crld.c +0 -0
  1282. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +100 -0
  1283. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_extku.c +0 -0
  1284. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +246 -0
  1285. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ia5.c +0 -0
  1286. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +218 -0
  1287. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_int.c +0 -0
  1288. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +371 -0
  1289. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_ncons.c +0 -0
  1290. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +68 -0
  1291. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +288 -0
  1292. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcia.c +0 -0
  1293. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pcons.c +0 -0
  1294. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pku.c +0 -0
  1295. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_pmaps.c +0 -0
  1296. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_prn.c +0 -0
  1297. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +882 -0
  1298. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +155 -0
  1299. data/third_party/{boringssl → boringssl-with-bazel/src}/crypto/x509v3/v3_sxnet.c +0 -0
  1300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1395 -0
  1301. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +459 -0
  1302. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +207 -0
  1303. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +173 -0
  1304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +911 -0
  1305. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1_mac.h +0 -0
  1306. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/asn1t.h +0 -0
  1307. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +575 -0
  1308. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +190 -0
  1309. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +933 -0
  1310. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +93 -0
  1311. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1057 -0
  1312. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +137 -0
  1313. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/buffer.h +0 -0
  1314. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +561 -0
  1315. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +96 -0
  1316. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/chacha.h +0 -0
  1317. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +638 -0
  1318. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +91 -0
  1319. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +180 -0
  1320. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +212 -0
  1321. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +149 -0
  1322. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +201 -0
  1323. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/des.h +0 -0
  1324. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +319 -0
  1325. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +331 -0
  1326. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +457 -0
  1327. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/dtls1.h +0 -0
  1328. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +18 -0
  1329. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +424 -0
  1330. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +372 -0
  1331. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +118 -0
  1332. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +205 -0
  1333. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +109 -0
  1334. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +465 -0
  1335. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1119 -0
  1336. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ex_data.h +0 -0
  1337. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/hkdf.h +0 -0
  1338. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +186 -0
  1339. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +100 -0
  1340. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/is_boringssl.h +0 -0
  1341. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +282 -0
  1342. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +108 -0
  1343. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +109 -0
  1344. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +175 -0
  1345. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +4259 -0
  1346. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +236 -0
  1347. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/obj_mac.h +0 -0
  1348. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/objects.h +0 -0
  1349. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslconf.h +0 -0
  1350. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/opensslv.h +0 -0
  1351. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/ossl_typ.h +0 -0
  1352. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +435 -0
  1353. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/pkcs12.h +0 -0
  1354. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +215 -0
  1355. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +269 -0
  1356. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +49 -0
  1357. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +102 -0
  1358. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +111 -0
  1359. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/rc4.h +0 -0
  1360. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +108 -0
  1361. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +818 -0
  1362. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/safestack.h +0 -0
  1363. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +294 -0
  1364. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +37 -0
  1365. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +199 -0
  1366. data/third_party/{boringssl → boringssl-with-bazel/src}/include/openssl/srtp.h +0 -0
  1367. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +5247 -0
  1368. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +333 -0
  1369. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +542 -0
  1370. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +191 -0
  1371. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +631 -0
  1372. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +282 -0
  1373. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +90 -0
  1374. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1292 -0
  1375. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +681 -0
  1376. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +831 -0
  1377. data/third_party/{boringssl → boringssl-with-bazel/src}/ssl/bio_ssl.cc +0 -0
  1378. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +837 -0
  1379. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +268 -0
  1380. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +273 -0
  1381. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +232 -0
  1382. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +200 -0
  1383. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +353 -0
  1384. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +675 -0
  1385. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +710 -0
  1386. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1890 -0
  1387. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1814 -0
  1388. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3579 -0
  1389. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +724 -0
  1390. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +221 -0
  1391. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +458 -0
  1392. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +432 -0
  1393. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +856 -0
  1394. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +306 -0
  1395. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +1016 -0
  1396. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +1718 -0
  1397. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +585 -0
  1398. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +397 -0
  1399. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +3053 -0
  1400. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +835 -0
  1401. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +1313 -0
  1402. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +230 -0
  1403. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +277 -0
  1404. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +394 -0
  1405. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +1358 -0
  1406. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +386 -0
  1407. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +3895 -0
  1408. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +689 -0
  1409. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1027 -0
  1410. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +513 -0
  1411. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1104 -0
  1412. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +317 -0
  1413. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +705 -0
  1414. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +981 -0
  1415. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +619 -0
  1416. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3147 -0
  1417. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1226 -0
  1418. data/third_party/re2/re2/bitmap256.h +117 -0
  1419. data/third_party/re2/re2/bitstate.cc +385 -0
  1420. data/third_party/re2/re2/compile.cc +1279 -0
  1421. data/third_party/re2/re2/dfa.cc +2130 -0
  1422. data/third_party/re2/re2/filtered_re2.cc +121 -0
  1423. data/third_party/re2/re2/filtered_re2.h +109 -0
  1424. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  1425. data/third_party/re2/re2/nfa.cc +713 -0
  1426. data/third_party/re2/re2/onepass.cc +623 -0
  1427. data/third_party/re2/re2/parse.cc +2464 -0
  1428. data/third_party/re2/re2/perl_groups.cc +119 -0
  1429. data/third_party/re2/re2/pod_array.h +55 -0
  1430. data/third_party/re2/re2/prefilter.cc +710 -0
  1431. data/third_party/re2/re2/prefilter.h +108 -0
  1432. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  1433. data/third_party/re2/re2/prefilter_tree.h +139 -0
  1434. data/third_party/re2/re2/prog.cc +988 -0
  1435. data/third_party/re2/re2/prog.h +436 -0
  1436. data/third_party/re2/re2/re2.cc +1362 -0
  1437. data/third_party/re2/re2/re2.h +1002 -0
  1438. data/third_party/re2/re2/regexp.cc +980 -0
  1439. data/third_party/re2/re2/regexp.h +659 -0
  1440. data/third_party/re2/re2/set.cc +154 -0
  1441. data/third_party/re2/re2/set.h +80 -0
  1442. data/third_party/re2/re2/simplify.cc +657 -0
  1443. data/third_party/re2/re2/sparse_array.h +392 -0
  1444. data/third_party/re2/re2/sparse_set.h +264 -0
  1445. data/third_party/re2/re2/stringpiece.cc +65 -0
  1446. data/third_party/re2/re2/stringpiece.h +210 -0
  1447. data/third_party/re2/re2/tostring.cc +351 -0
  1448. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  1449. data/third_party/re2/re2/unicode_casefold.h +78 -0
  1450. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  1451. data/third_party/re2/re2/unicode_groups.h +67 -0
  1452. data/third_party/re2/re2/walker-inl.h +246 -0
  1453. data/third_party/re2/util/benchmark.h +156 -0
  1454. data/third_party/re2/util/flags.h +26 -0
  1455. data/third_party/re2/util/logging.h +109 -0
  1456. data/third_party/re2/util/malloc_counter.h +19 -0
  1457. data/third_party/re2/util/mix.h +41 -0
  1458. data/third_party/re2/util/mutex.h +148 -0
  1459. data/third_party/re2/util/pcre.cc +1025 -0
  1460. data/third_party/re2/util/pcre.h +681 -0
  1461. data/third_party/re2/util/rune.cc +260 -0
  1462. data/third_party/re2/util/strutil.cc +149 -0
  1463. data/third_party/re2/util/strutil.h +21 -0
  1464. data/third_party/re2/util/test.h +50 -0
  1465. data/third_party/re2/util/utf.h +44 -0
  1466. data/third_party/re2/util/util.h +42 -0
  1467. data/third_party/upb/upb/decode.c +621 -0
  1468. data/third_party/upb/upb/decode.h +21 -0
  1469. data/third_party/upb/upb/encode.c +420 -0
  1470. data/third_party/upb/upb/encode.h +21 -0
  1471. data/third_party/upb/upb/msg.c +177 -0
  1472. data/third_party/upb/upb/msg.h +473 -0
  1473. data/third_party/upb/upb/port.c +26 -0
  1474. data/third_party/upb/upb/port_def.inc +179 -0
  1475. data/third_party/upb/upb/port_undef.inc +28 -0
  1476. data/third_party/upb/upb/table.c +880 -0
  1477. data/third_party/upb/upb/table.int.h +466 -0
  1478. data/third_party/upb/upb/upb.c +287 -0
  1479. data/third_party/upb/upb/upb.h +308 -0
  1480. data/third_party/upb/upb/upb.hpp +88 -0
  1481. metadata +1054 -526
  1482. data/src/boringssl/err_data.c +0 -1362
  1483. data/src/core/ext/filters/client_channel/connector.cc +0 -41
  1484. data/src/core/ext/filters/client_channel/health/health.pb.c +0 -23
  1485. data/src/core/ext/filters/client_channel/health/health.pb.h +0 -73
  1486. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +0 -19
  1487. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +0 -54
  1488. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +0 -19
  1489. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +0 -54
  1490. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +0 -89
  1491. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +0 -164
  1492. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -2249
  1493. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel.h +0 -36
  1494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_secure.cc +0 -61
  1495. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.cc +0 -85
  1496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_client_stats.h +0 -72
  1497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.cc +0 -307
  1498. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -89
  1499. data/src/core/ext/filters/client_channel/parse_address.cc +0 -234
  1500. data/src/core/ext/filters/client_channel/parse_address.h +0 -53
  1501. data/src/core/ext/filters/client_channel/proxy_mapper.cc +0 -48
  1502. data/src/core/lib/gpr/host_port.cc +0 -98
  1503. data/src/core/lib/gpr/host_port.h +0 -43
  1504. data/src/core/lib/gpr/mpscq.cc +0 -117
  1505. data/src/core/lib/gpr/mpscq.h +0 -88
  1506. data/src/core/lib/gprpp/abstract.h +0 -37
  1507. data/src/core/lib/gprpp/inlined_vector.h +0 -200
  1508. data/src/core/lib/gprpp/optional.h +0 -48
  1509. data/src/core/lib/gprpp/pair.h +0 -38
  1510. data/src/core/lib/json/json.cc +0 -94
  1511. data/src/core/lib/json/json_common.h +0 -34
  1512. data/src/core/lib/json/json_reader.h +0 -146
  1513. data/src/core/lib/json/json_string.cc +0 -367
  1514. data/src/core/lib/json/json_writer.h +0 -84
  1515. data/src/core/lib/security/credentials/tls/spiffe_credentials.cc +0 -129
  1516. data/src/core/lib/security/credentials/tls/spiffe_credentials.h +0 -62
  1517. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +0 -426
  1518. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +0 -122
  1519. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  1520. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  1521. data/src/core/lib/slice/slice_hash_table.h +0 -205
  1522. data/src/core/lib/slice/slice_weak_hash_table.h +0 -109
  1523. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +0 -520
  1524. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +0 -323
  1525. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +0 -145
  1526. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +0 -149
  1527. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -47
  1528. data/src/core/tsi/alts/handshaker/altscontext.pb.h +0 -63
  1529. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -122
  1530. data/src/core/tsi/alts/handshaker/handshaker.pb.h +0 -254
  1531. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -49
  1532. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +0 -78
  1533. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3006
  1534. data/third_party/boringssl/crypto/asn1/a_bitstr.c +0 -271
  1535. data/third_party/boringssl/crypto/asn1/a_bool.c +0 -110
  1536. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +0 -297
  1537. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -111
  1538. data/third_party/boringssl/crypto/asn1/a_enum.c +0 -195
  1539. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +0 -150
  1540. data/third_party/boringssl/crypto/asn1/a_int.c +0 -479
  1541. data/third_party/boringssl/crypto/asn1/a_mbstr.c +0 -411
  1542. data/third_party/boringssl/crypto/asn1/a_object.c +0 -275
  1543. data/third_party/boringssl/crypto/asn1/a_strnid.c +0 -312
  1544. data/third_party/boringssl/crypto/asn1/a_time.c +0 -213
  1545. data/third_party/boringssl/crypto/asn1/a_type.c +0 -151
  1546. data/third_party/boringssl/crypto/asn1/asn1_lib.c +0 -442
  1547. data/third_party/boringssl/crypto/asn1/asn_pack.c +0 -105
  1548. data/third_party/boringssl/crypto/asn1/f_enum.c +0 -93
  1549. data/third_party/boringssl/crypto/asn1/f_int.c +0 -97
  1550. data/third_party/boringssl/crypto/asn1/f_string.c +0 -91
  1551. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -662
  1552. data/third_party/boringssl/crypto/base64/base64.c +0 -466
  1553. data/third_party/boringssl/crypto/bio/bio.c +0 -636
  1554. data/third_party/boringssl/crypto/bio/connect.c +0 -542
  1555. data/third_party/boringssl/crypto/bio/fd.c +0 -276
  1556. data/third_party/boringssl/crypto/bio/file.c +0 -315
  1557. data/third_party/boringssl/crypto/bio/pair.c +0 -489
  1558. data/third_party/boringssl/crypto/bio/socket.c +0 -202
  1559. data/third_party/boringssl/crypto/bio/socket_helper.c +0 -114
  1560. data/third_party/boringssl/crypto/bn_extra/convert.c +0 -466
  1561. data/third_party/boringssl/crypto/buf/buf.c +0 -231
  1562. data/third_party/boringssl/crypto/bytestring/ber.c +0 -261
  1563. data/third_party/boringssl/crypto/bytestring/cbb.c +0 -668
  1564. data/third_party/boringssl/crypto/bytestring/cbs.c +0 -618
  1565. data/third_party/boringssl/crypto/bytestring/internal.h +0 -75
  1566. data/third_party/boringssl/crypto/chacha/chacha.c +0 -167
  1567. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +0 -114
  1568. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +0 -152
  1569. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +0 -203
  1570. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +0 -281
  1571. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +0 -867
  1572. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +0 -326
  1573. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  1574. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +0 -680
  1575. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +0 -482
  1576. data/third_party/boringssl/crypto/cmac/cmac.c +0 -241
  1577. data/third_party/boringssl/crypto/conf/conf.c +0 -803
  1578. data/third_party/boringssl/crypto/cpu-arm-linux.c +0 -363
  1579. data/third_party/boringssl/crypto/cpu-intel.c +0 -288
  1580. data/third_party/boringssl/crypto/crypto.c +0 -198
  1581. data/third_party/boringssl/crypto/curve25519/spake25519.c +0 -539
  1582. data/third_party/boringssl/crypto/dh/check.c +0 -217
  1583. data/third_party/boringssl/crypto/dh/dh.c +0 -519
  1584. data/third_party/boringssl/crypto/dsa/dsa.c +0 -946
  1585. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +0 -562
  1586. data/third_party/boringssl/crypto/ecdh/ecdh.c +0 -162
  1587. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +0 -275
  1588. data/third_party/boringssl/crypto/engine/engine.c +0 -98
  1589. data/third_party/boringssl/crypto/err/err.c +0 -847
  1590. data/third_party/boringssl/crypto/err/internal.h +0 -58
  1591. data/third_party/boringssl/crypto/evp/evp.c +0 -362
  1592. data/third_party/boringssl/crypto/evp/evp_asn1.c +0 -337
  1593. data/third_party/boringssl/crypto/evp/evp_ctx.c +0 -446
  1594. data/third_party/boringssl/crypto/evp/internal.h +0 -252
  1595. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +0 -268
  1596. data/third_party/boringssl/crypto/evp/p_ec.c +0 -239
  1597. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +0 -256
  1598. data/third_party/boringssl/crypto/evp/p_ed25519.c +0 -71
  1599. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +0 -190
  1600. data/third_party/boringssl/crypto/evp/p_rsa.c +0 -634
  1601. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +0 -189
  1602. data/third_party/boringssl/crypto/evp/scrypt.c +0 -209
  1603. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +0 -1100
  1604. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +0 -100
  1605. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +0 -138
  1606. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +0 -112
  1607. data/third_party/boringssl/crypto/fipsmodule/bcm.c +0 -148
  1608. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +0 -428
  1609. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +0 -200
  1610. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +0 -303
  1611. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +0 -895
  1612. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +0 -1356
  1613. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -683
  1614. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +0 -573
  1615. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +0 -526
  1616. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +0 -185
  1617. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +0 -876
  1618. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +0 -1154
  1619. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +0 -351
  1620. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +0 -231
  1621. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +0 -33
  1622. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +0 -364
  1623. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +0 -615
  1624. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +0 -1437
  1625. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +0 -233
  1626. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +0 -129
  1627. data/third_party/boringssl/crypto/fipsmodule/delocate.h +0 -88
  1628. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +0 -256
  1629. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +0 -280
  1630. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +0 -268
  1631. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +0 -974
  1632. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +0 -453
  1633. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -270
  1634. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +0 -337
  1635. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +0 -373
  1636. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +0 -1104
  1637. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +0 -9503
  1638. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +0 -447
  1639. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +0 -117
  1640. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +0 -1046
  1641. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +0 -104
  1642. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +0 -354
  1643. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +0 -458
  1644. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +0 -27
  1645. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +0 -254
  1646. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +0 -298
  1647. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +0 -211
  1648. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  1649. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +0 -234
  1650. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +0 -220
  1651. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +0 -1063
  1652. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +0 -388
  1653. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +0 -95
  1654. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +0 -202
  1655. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +0 -92
  1656. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +0 -358
  1657. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +0 -302
  1658. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +0 -239
  1659. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -126
  1660. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +0 -692
  1661. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +0 -875
  1662. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +0 -1218
  1663. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +0 -581
  1664. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +0 -375
  1665. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +0 -337
  1666. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +0 -608
  1667. data/third_party/boringssl/crypto/internal.h +0 -739
  1668. data/third_party/boringssl/crypto/lhash/lhash.c +0 -336
  1669. data/third_party/boringssl/crypto/mem.c +0 -235
  1670. data/third_party/boringssl/crypto/obj/obj.c +0 -554
  1671. data/third_party/boringssl/crypto/obj/obj_dat.h +0 -6244
  1672. data/third_party/boringssl/crypto/pem/pem_all.c +0 -262
  1673. data/third_party/boringssl/crypto/pem/pem_info.c +0 -379
  1674. data/third_party/boringssl/crypto/pem/pem_lib.c +0 -776
  1675. data/third_party/boringssl/crypto/pem/pem_oth.c +0 -88
  1676. data/third_party/boringssl/crypto/pem/pem_pk8.c +0 -258
  1677. data/third_party/boringssl/crypto/pem/pem_pkey.c +0 -227
  1678. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +0 -166
  1679. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +0 -233
  1680. data/third_party/boringssl/crypto/pkcs8/internal.h +0 -120
  1681. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +0 -307
  1682. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +0 -513
  1683. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +0 -789
  1684. data/third_party/boringssl/crypto/poly1305/poly1305.c +0 -318
  1685. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +0 -304
  1686. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +0 -839
  1687. data/third_party/boringssl/crypto/pool/internal.h +0 -45
  1688. data/third_party/boringssl/crypto/pool/pool.c +0 -200
  1689. data/third_party/boringssl/crypto/rand_extra/deterministic.c +0 -48
  1690. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +0 -43
  1691. data/third_party/boringssl/crypto/rand_extra/windows.c +0 -53
  1692. data/third_party/boringssl/crypto/refcount_lock.c +0 -53
  1693. data/third_party/boringssl/crypto/stack/stack.c +0 -380
  1694. data/third_party/boringssl/crypto/thread_none.c +0 -59
  1695. data/third_party/boringssl/crypto/thread_pthread.c +0 -206
  1696. data/third_party/boringssl/crypto/thread_win.c +0 -237
  1697. data/third_party/boringssl/crypto/x509/a_strex.c +0 -633
  1698. data/third_party/boringssl/crypto/x509/a_verify.c +0 -115
  1699. data/third_party/boringssl/crypto/x509/algorithm.c +0 -153
  1700. data/third_party/boringssl/crypto/x509/asn1_gen.c +0 -841
  1701. data/third_party/boringssl/crypto/x509/by_dir.c +0 -451
  1702. data/third_party/boringssl/crypto/x509/by_file.c +0 -274
  1703. data/third_party/boringssl/crypto/x509/t_crl.c +0 -128
  1704. data/third_party/boringssl/crypto/x509/t_req.c +0 -246
  1705. data/third_party/boringssl/crypto/x509/t_x509.c +0 -547
  1706. data/third_party/boringssl/crypto/x509/x509.c +0 -157
  1707. data/third_party/boringssl/crypto/x509/x509_cmp.c +0 -477
  1708. data/third_party/boringssl/crypto/x509/x509_def.c +0 -103
  1709. data/third_party/boringssl/crypto/x509/x509_lu.c +0 -725
  1710. data/third_party/boringssl/crypto/x509/x509_obj.c +0 -198
  1711. data/third_party/boringssl/crypto/x509/x509_r2x.c +0 -117
  1712. data/third_party/boringssl/crypto/x509/x509_req.c +0 -322
  1713. data/third_party/boringssl/crypto/x509/x509_set.c +0 -164
  1714. data/third_party/boringssl/crypto/x509/x509_trs.c +0 -326
  1715. data/third_party/boringssl/crypto/x509/x509_txt.c +0 -205
  1716. data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -2476
  1717. data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -670
  1718. data/third_party/boringssl/crypto/x509/x509cset.c +0 -170
  1719. data/third_party/boringssl/crypto/x509/x509name.c +0 -389
  1720. data/third_party/boringssl/crypto/x509/x_all.c +0 -501
  1721. data/third_party/boringssl/crypto/x509/x_crl.c +0 -541
  1722. data/third_party/boringssl/crypto/x509/x_pubkey.c +0 -368
  1723. data/third_party/boringssl/crypto/x509/x_sig.c +0 -69
  1724. data/third_party/boringssl/crypto/x509/x_x509.c +0 -328
  1725. data/third_party/boringssl/crypto/x509v3/ext_dat.h +0 -143
  1726. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +0 -284
  1727. data/third_party/boringssl/crypto/x509v3/pcy_node.c +0 -188
  1728. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +0 -840
  1729. data/third_party/boringssl/crypto/x509v3/v3_akey.c +0 -204
  1730. data/third_party/boringssl/crypto/x509v3/v3_alt.c +0 -623
  1731. data/third_party/boringssl/crypto/x509v3/v3_conf.c +0 -462
  1732. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +0 -502
  1733. data/third_party/boringssl/crypto/x509v3/v3_enum.c +0 -100
  1734. data/third_party/boringssl/crypto/x509v3/v3_genn.c +0 -251
  1735. data/third_party/boringssl/crypto/x509v3/v3_info.c +0 -219
  1736. data/third_party/boringssl/crypto/x509v3/v3_lib.c +0 -370
  1737. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -287
  1738. data/third_party/boringssl/crypto/x509v3/v3_purp.c +0 -866
  1739. data/third_party/boringssl/crypto/x509v3/v3_skey.c +0 -152
  1740. data/third_party/boringssl/crypto/x509v3/v3_utl.c +0 -1352
  1741. data/third_party/boringssl/include/openssl/aead.h +0 -433
  1742. data/third_party/boringssl/include/openssl/aes.h +0 -170
  1743. data/third_party/boringssl/include/openssl/arm_arch.h +0 -121
  1744. data/third_party/boringssl/include/openssl/asn1.h +0 -981
  1745. data/third_party/boringssl/include/openssl/base.h +0 -457
  1746. data/third_party/boringssl/include/openssl/base64.h +0 -187
  1747. data/third_party/boringssl/include/openssl/bio.h +0 -902
  1748. data/third_party/boringssl/include/openssl/blowfish.h +0 -93
  1749. data/third_party/boringssl/include/openssl/bn.h +0 -1019
  1750. data/third_party/boringssl/include/openssl/buf.h +0 -137
  1751. data/third_party/boringssl/include/openssl/bytestring.h +0 -505
  1752. data/third_party/boringssl/include/openssl/cast.h +0 -96
  1753. data/third_party/boringssl/include/openssl/cipher.h +0 -608
  1754. data/third_party/boringssl/include/openssl/cmac.h +0 -87
  1755. data/third_party/boringssl/include/openssl/conf.h +0 -183
  1756. data/third_party/boringssl/include/openssl/cpu.h +0 -196
  1757. data/third_party/boringssl/include/openssl/crypto.h +0 -122
  1758. data/third_party/boringssl/include/openssl/curve25519.h +0 -201
  1759. data/third_party/boringssl/include/openssl/dh.h +0 -298
  1760. data/third_party/boringssl/include/openssl/digest.h +0 -316
  1761. data/third_party/boringssl/include/openssl/dsa.h +0 -435
  1762. data/third_party/boringssl/include/openssl/ec.h +0 -413
  1763. data/third_party/boringssl/include/openssl/ec_key.h +0 -342
  1764. data/third_party/boringssl/include/openssl/ecdh.h +0 -101
  1765. data/third_party/boringssl/include/openssl/ecdsa.h +0 -199
  1766. data/third_party/boringssl/include/openssl/engine.h +0 -109
  1767. data/third_party/boringssl/include/openssl/err.h +0 -458
  1768. data/third_party/boringssl/include/openssl/evp.h +0 -873
  1769. data/third_party/boringssl/include/openssl/hmac.h +0 -186
  1770. data/third_party/boringssl/include/openssl/lhash.h +0 -174
  1771. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  1772. data/third_party/boringssl/include/openssl/md4.h +0 -106
  1773. data/third_party/boringssl/include/openssl/md5.h +0 -107
  1774. data/third_party/boringssl/include/openssl/mem.h +0 -156
  1775. data/third_party/boringssl/include/openssl/nid.h +0 -4242
  1776. data/third_party/boringssl/include/openssl/obj.h +0 -233
  1777. data/third_party/boringssl/include/openssl/pem.h +0 -397
  1778. data/third_party/boringssl/include/openssl/pkcs7.h +0 -82
  1779. data/third_party/boringssl/include/openssl/pkcs8.h +0 -230
  1780. data/third_party/boringssl/include/openssl/poly1305.h +0 -51
  1781. data/third_party/boringssl/include/openssl/pool.h +0 -91
  1782. data/third_party/boringssl/include/openssl/rand.h +0 -125
  1783. data/third_party/boringssl/include/openssl/ripemd.h +0 -107
  1784. data/third_party/boringssl/include/openssl/rsa.h +0 -756
  1785. data/third_party/boringssl/include/openssl/sha.h +0 -256
  1786. data/third_party/boringssl/include/openssl/span.h +0 -191
  1787. data/third_party/boringssl/include/openssl/ssl.h +0 -4740
  1788. data/third_party/boringssl/include/openssl/ssl3.h +0 -332
  1789. data/third_party/boringssl/include/openssl/stack.h +0 -485
  1790. data/third_party/boringssl/include/openssl/thread.h +0 -191
  1791. data/third_party/boringssl/include/openssl/tls1.h +0 -618
  1792. data/third_party/boringssl/include/openssl/type_check.h +0 -91
  1793. data/third_party/boringssl/include/openssl/x509.h +0 -1180
  1794. data/third_party/boringssl/include/openssl/x509_vfy.h +0 -614
  1795. data/third_party/boringssl/include/openssl/x509v3.h +0 -827
  1796. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
  1797. data/third_party/boringssl/ssl/d1_both.cc +0 -851
  1798. data/third_party/boringssl/ssl/d1_lib.cc +0 -267
  1799. data/third_party/boringssl/ssl/d1_pkt.cc +0 -274
  1800. data/third_party/boringssl/ssl/d1_srtp.cc +0 -232
  1801. data/third_party/boringssl/ssl/dtls_method.cc +0 -193
  1802. data/third_party/boringssl/ssl/dtls_record.cc +0 -353
  1803. data/third_party/boringssl/ssl/handoff.cc +0 -285
  1804. data/third_party/boringssl/ssl/handshake.cc +0 -630
  1805. data/third_party/boringssl/ssl/handshake_client.cc +0 -1842
  1806. data/third_party/boringssl/ssl/handshake_server.cc +0 -1674
  1807. data/third_party/boringssl/ssl/internal.h +0 -3064
  1808. data/third_party/boringssl/ssl/s3_both.cc +0 -585
  1809. data/third_party/boringssl/ssl/s3_lib.cc +0 -226
  1810. data/third_party/boringssl/ssl/s3_pkt.cc +0 -425
  1811. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +0 -412
  1812. data/third_party/boringssl/ssl/ssl_asn1.cc +0 -844
  1813. data/third_party/boringssl/ssl/ssl_buffer.cc +0 -286
  1814. data/third_party/boringssl/ssl/ssl_cert.cc +0 -913
  1815. data/third_party/boringssl/ssl/ssl_cipher.cc +0 -1781
  1816. data/third_party/boringssl/ssl/ssl_file.cc +0 -583
  1817. data/third_party/boringssl/ssl/ssl_key_share.cc +0 -252
  1818. data/third_party/boringssl/ssl/ssl_lib.cc +0 -2719
  1819. data/third_party/boringssl/ssl/ssl_privkey.cc +0 -494
  1820. data/third_party/boringssl/ssl/ssl_session.cc +0 -1221
  1821. data/third_party/boringssl/ssl/ssl_stat.cc +0 -224
  1822. data/third_party/boringssl/ssl/ssl_transcript.cc +0 -398
  1823. data/third_party/boringssl/ssl/ssl_versions.cc +0 -399
  1824. data/third_party/boringssl/ssl/ssl_x509.cc +0 -1297
  1825. data/third_party/boringssl/ssl/t1_enc.cc +0 -452
  1826. data/third_party/boringssl/ssl/t1_lib.cc +0 -3783
  1827. data/third_party/boringssl/ssl/tls13_both.cc +0 -559
  1828. data/third_party/boringssl/ssl/tls13_client.cc +0 -891
  1829. data/third_party/boringssl/ssl/tls13_enc.cc +0 -493
  1830. data/third_party/boringssl/ssl/tls13_server.cc +0 -1022
  1831. data/third_party/boringssl/ssl/tls_method.cc +0 -274
  1832. data/third_party/boringssl/ssl/tls_record.cc +0 -703
  1833. data/third_party/boringssl/third_party/fiat/curve25519.c +0 -3230
  1834. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +0 -7880
  1835. data/third_party/boringssl/third_party/fiat/internal.h +0 -154
  1836. data/third_party/boringssl/third_party/fiat/p256.c +0 -1824
  1837. data/third_party/nanopb/pb.h +0 -579
  1838. data/third_party/nanopb/pb_common.c +0 -97
  1839. data/third_party/nanopb/pb_common.h +0 -42
  1840. data/third_party/nanopb/pb_decode.c +0 -1347
  1841. data/third_party/nanopb/pb_decode.h +0 -149
  1842. data/third_party/nanopb/pb_encode.c +0 -696
  1843. data/third_party/nanopb/pb_encode.h +0 -154
@@ -0,0 +1,2464 @@
1
+ // Copyright 2006 The RE2 Authors. All Rights Reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ // Regular expression parser.
6
+
7
+ // The parser is a simple precedence-based parser with a
8
+ // manual stack. The parsing work is done by the methods
9
+ // of the ParseState class. The Regexp::Parse function is
10
+ // essentially just a lexer that calls the ParseState method
11
+ // for each token.
12
+
13
+ // The parser recognizes POSIX extended regular expressions
14
+ // excluding backreferences, collating elements, and collating
15
+ // classes. It also allows the empty string as a regular expression
16
+ // and recognizes the Perl escape sequences \d, \s, \w, \D, \S, and \W.
17
+ // See regexp.h for rationale.
18
+
19
+ #include <ctype.h>
20
+ #include <stddef.h>
21
+ #include <stdint.h>
22
+ #include <string.h>
23
+ #include <algorithm>
24
+ #include <map>
25
+ #include <string>
26
+ #include <vector>
27
+
28
+ #include "util/util.h"
29
+ #include "util/logging.h"
30
+ #include "util/strutil.h"
31
+ #include "util/utf.h"
32
+ #include "re2/pod_array.h"
33
+ #include "re2/regexp.h"
34
+ #include "re2/stringpiece.h"
35
+ #include "re2/unicode_casefold.h"
36
+ #include "re2/unicode_groups.h"
37
+ #include "re2/walker-inl.h"
38
+
39
+ #if defined(RE2_USE_ICU)
40
+ #include "unicode/uniset.h"
41
+ #include "unicode/unistr.h"
42
+ #include "unicode/utypes.h"
43
+ #endif
44
+
45
+ namespace re2 {
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
53
+
54
+ // Regular expression parse state.
55
+ // The list of parsed regexps so far is maintained as a vector of
56
+ // Regexp pointers called the stack. Left parenthesis and vertical
57
+ // bar markers are also placed on the stack, as Regexps with
58
+ // non-standard opcodes.
59
+ // Scanning a left parenthesis causes the parser to push a left parenthesis
60
+ // marker on the stack.
61
+ // Scanning a vertical bar causes the parser to pop the stack until it finds a
62
+ // vertical bar or left parenthesis marker (not popping the marker),
63
+ // concatenate all the popped results, and push them back on
64
+ // the stack (DoConcatenation).
65
+ // Scanning a right parenthesis causes the parser to act as though it
66
+ // has seen a vertical bar, which then leaves the top of the stack in the
67
+ // form LeftParen regexp VerticalBar regexp VerticalBar ... regexp VerticalBar.
68
+ // The parser pops all this off the stack and creates an alternation of the
69
+ // regexps (DoAlternation).
70
+
71
+ class Regexp::ParseState {
72
+ public:
73
+ ParseState(ParseFlags flags, const StringPiece& whole_regexp,
74
+ RegexpStatus* status);
75
+ ~ParseState();
76
+
77
+ ParseFlags flags() { return flags_; }
78
+ int rune_max() { return rune_max_; }
79
+
80
+ // Parse methods. All public methods return a bool saying
81
+ // whether parsing should continue. If a method returns
82
+ // false, it has set fields in *status_, and the parser
83
+ // should return NULL.
84
+
85
+ // Pushes the given regular expression onto the stack.
86
+ // Could check for too much memory used here.
87
+ bool PushRegexp(Regexp* re);
88
+
89
+ // Pushes the literal rune r onto the stack.
90
+ bool PushLiteral(Rune r);
91
+
92
+ // Pushes a regexp with the given op (and no args) onto the stack.
93
+ bool PushSimpleOp(RegexpOp op);
94
+
95
+ // Pushes a ^ onto the stack.
96
+ bool PushCaret();
97
+
98
+ // Pushes a \b (word == true) or \B (word == false) onto the stack.
99
+ bool PushWordBoundary(bool word);
100
+
101
+ // Pushes a $ onto the stack.
102
+ bool PushDollar();
103
+
104
+ // Pushes a . onto the stack
105
+ bool PushDot();
106
+
107
+ // Pushes a repeat operator regexp onto the stack.
108
+ // A valid argument for the operator must already be on the stack.
109
+ // s is the name of the operator, for use in error messages.
110
+ bool PushRepeatOp(RegexpOp op, const StringPiece& s, bool nongreedy);
111
+
112
+ // Pushes a repetition regexp onto the stack.
113
+ // A valid argument for the operator must already be on the stack.
114
+ bool PushRepetition(int min, int max, const StringPiece& s, bool nongreedy);
115
+
116
+ // Checks whether a particular regexp op is a marker.
117
+ bool IsMarker(RegexpOp op);
118
+
119
+ // Processes a left parenthesis in the input.
120
+ // Pushes a marker onto the stack.
121
+ bool DoLeftParen(const StringPiece& name);
122
+ bool DoLeftParenNoCapture();
123
+
124
+ // Processes a vertical bar in the input.
125
+ bool DoVerticalBar();
126
+
127
+ // Processes a right parenthesis in the input.
128
+ bool DoRightParen();
129
+
130
+ // Processes the end of input, returning the final regexp.
131
+ Regexp* DoFinish();
132
+
133
+ // Finishes the regexp if necessary, preparing it for use
134
+ // in a more complicated expression.
135
+ // If it is a CharClassBuilder, converts into a CharClass.
136
+ Regexp* FinishRegexp(Regexp*);
137
+
138
+ // These routines don't manipulate the parse stack
139
+ // directly, but they do need to look at flags_.
140
+ // ParseCharClass also manipulates the internals of Regexp
141
+ // while creating *out_re.
142
+
143
+ // Parse a character class into *out_re.
144
+ // Removes parsed text from s.
145
+ bool ParseCharClass(StringPiece* s, Regexp** out_re,
146
+ RegexpStatus* status);
147
+
148
+ // Parse a character class character into *rp.
149
+ // Removes parsed text from s.
150
+ bool ParseCCCharacter(StringPiece* s, Rune *rp,
151
+ const StringPiece& whole_class,
152
+ RegexpStatus* status);
153
+
154
+ // Parse a character class range into rr.
155
+ // Removes parsed text from s.
156
+ bool ParseCCRange(StringPiece* s, RuneRange* rr,
157
+ const StringPiece& whole_class,
158
+ RegexpStatus* status);
159
+
160
+ // Parse a Perl flag set or non-capturing group from s.
161
+ bool ParsePerlFlags(StringPiece* s);
162
+
163
+
164
+ // Finishes the current concatenation,
165
+ // collapsing it into a single regexp on the stack.
166
+ void DoConcatenation();
167
+
168
+ // Finishes the current alternation,
169
+ // collapsing it to a single regexp on the stack.
170
+ void DoAlternation();
171
+
172
+ // Generalized DoAlternation/DoConcatenation.
173
+ void DoCollapse(RegexpOp op);
174
+
175
+ // Maybe concatenate Literals into LiteralString.
176
+ bool MaybeConcatString(int r, ParseFlags flags);
177
+
178
+ private:
179
+ ParseFlags flags_;
180
+ StringPiece whole_regexp_;
181
+ RegexpStatus* status_;
182
+ Regexp* stacktop_;
183
+ int ncap_; // number of capturing parens seen
184
+ int rune_max_; // maximum char value for this encoding
185
+
186
+ ParseState(const ParseState&) = delete;
187
+ ParseState& operator=(const ParseState&) = delete;
188
+ };
189
+
190
+ // Pseudo-operators - only on parse stack.
191
+ const RegexpOp kLeftParen = static_cast<RegexpOp>(kMaxRegexpOp+1);
192
+ const RegexpOp kVerticalBar = static_cast<RegexpOp>(kMaxRegexpOp+2);
193
+
194
+ Regexp::ParseState::ParseState(ParseFlags flags,
195
+ const StringPiece& whole_regexp,
196
+ RegexpStatus* status)
197
+ : flags_(flags), whole_regexp_(whole_regexp),
198
+ status_(status), stacktop_(NULL), ncap_(0) {
199
+ if (flags_ & Latin1)
200
+ rune_max_ = 0xFF;
201
+ else
202
+ rune_max_ = Runemax;
203
+ }
204
+
205
+ // Cleans up by freeing all the regexps on the stack.
206
+ Regexp::ParseState::~ParseState() {
207
+ Regexp* next;
208
+ for (Regexp* re = stacktop_; re != NULL; re = next) {
209
+ next = re->down_;
210
+ re->down_ = NULL;
211
+ if (re->op() == kLeftParen)
212
+ delete re->name_;
213
+ re->Decref();
214
+ }
215
+ }
216
+
217
+ // Finishes the regexp if necessary, preparing it for use in
218
+ // a more complex expression.
219
+ // If it is a CharClassBuilder, converts into a CharClass.
220
+ Regexp* Regexp::ParseState::FinishRegexp(Regexp* re) {
221
+ if (re == NULL)
222
+ return NULL;
223
+ re->down_ = NULL;
224
+
225
+ if (re->op_ == kRegexpCharClass && re->ccb_ != NULL) {
226
+ CharClassBuilder* ccb = re->ccb_;
227
+ re->ccb_ = NULL;
228
+ re->cc_ = ccb->GetCharClass();
229
+ delete ccb;
230
+ }
231
+
232
+ return re;
233
+ }
234
+
235
+ // Pushes the given regular expression onto the stack.
236
+ // Could check for too much memory used here.
237
+ bool Regexp::ParseState::PushRegexp(Regexp* re) {
238
+ MaybeConcatString(-1, NoParseFlags);
239
+
240
+ // Special case: a character class of one character is just
241
+ // a literal. This is a common idiom for escaping
242
+ // single characters (e.g., [.] instead of \.), and some
243
+ // analysis does better with fewer character classes.
244
+ // Similarly, [Aa] can be rewritten as a literal A with ASCII case folding.
245
+ if (re->op_ == kRegexpCharClass && re->ccb_ != NULL) {
246
+ re->ccb_->RemoveAbove(rune_max_);
247
+ if (re->ccb_->size() == 1) {
248
+ Rune r = re->ccb_->begin()->lo;
249
+ re->Decref();
250
+ re = new Regexp(kRegexpLiteral, flags_);
251
+ re->rune_ = r;
252
+ } else if (re->ccb_->size() == 2) {
253
+ Rune r = re->ccb_->begin()->lo;
254
+ if ('A' <= r && r <= 'Z' && re->ccb_->Contains(r + 'a' - 'A')) {
255
+ re->Decref();
256
+ re = new Regexp(kRegexpLiteral, flags_ | FoldCase);
257
+ re->rune_ = r + 'a' - 'A';
258
+ }
259
+ }
260
+ }
261
+
262
+ if (!IsMarker(re->op()))
263
+ re->simple_ = re->ComputeSimple();
264
+ re->down_ = stacktop_;
265
+ stacktop_ = re;
266
+ return true;
267
+ }
268
+
269
+ // Searches the case folding tables and returns the CaseFold* that contains r.
270
+ // If there isn't one, returns the CaseFold* with smallest f->lo bigger than r.
271
+ // If there isn't one, returns NULL.
272
+ const CaseFold* LookupCaseFold(const CaseFold *f, int n, Rune r) {
273
+ const CaseFold* ef = f + n;
274
+
275
+ // Binary search for entry containing r.
276
+ while (n > 0) {
277
+ int m = n/2;
278
+ if (f[m].lo <= r && r <= f[m].hi)
279
+ return &f[m];
280
+ if (r < f[m].lo) {
281
+ n = m;
282
+ } else {
283
+ f += m+1;
284
+ n -= m+1;
285
+ }
286
+ }
287
+
288
+ // There is no entry that contains r, but f points
289
+ // where it would have been. Unless f points at
290
+ // the end of the array, it points at the next entry
291
+ // after r.
292
+ if (f < ef)
293
+ return f;
294
+
295
+ // No entry contains r; no entry contains runes > r.
296
+ return NULL;
297
+ }
298
+
299
+ // Returns the result of applying the fold f to the rune r.
300
+ Rune ApplyFold(const CaseFold *f, Rune r) {
301
+ switch (f->delta) {
302
+ default:
303
+ return r + f->delta;
304
+
305
+ case EvenOddSkip: // even <-> odd but only applies to every other
306
+ if ((r - f->lo) % 2)
307
+ return r;
308
+ FALLTHROUGH_INTENDED;
309
+ case EvenOdd: // even <-> odd
310
+ if (r%2 == 0)
311
+ return r + 1;
312
+ return r - 1;
313
+
314
+ case OddEvenSkip: // odd <-> even but only applies to every other
315
+ if ((r - f->lo) % 2)
316
+ return r;
317
+ FALLTHROUGH_INTENDED;
318
+ case OddEven: // odd <-> even
319
+ if (r%2 == 1)
320
+ return r + 1;
321
+ return r - 1;
322
+ }
323
+ }
324
+
325
+ // Returns the next Rune in r's folding cycle (see unicode_casefold.h).
326
+ // Examples:
327
+ // CycleFoldRune('A') = 'a'
328
+ // CycleFoldRune('a') = 'A'
329
+ //
330
+ // CycleFoldRune('K') = 'k'
331
+ // CycleFoldRune('k') = 0x212A (Kelvin)
332
+ // CycleFoldRune(0x212A) = 'K'
333
+ //
334
+ // CycleFoldRune('?') = '?'
335
+ Rune CycleFoldRune(Rune r) {
336
+ const CaseFold* f = LookupCaseFold(unicode_casefold, num_unicode_casefold, r);
337
+ if (f == NULL || r < f->lo)
338
+ return r;
339
+ return ApplyFold(f, r);
340
+ }
341
+
342
+ // Add lo-hi to the class, along with their fold-equivalent characters.
343
+ // If lo-hi is already in the class, assume that the fold-equivalent
344
+ // chars are there too, so there's no work to do.
345
+ static void AddFoldedRange(CharClassBuilder* cc, Rune lo, Rune hi, int depth) {
346
+ // AddFoldedRange calls itself recursively for each rune in the fold cycle.
347
+ // Most folding cycles are small: there aren't any bigger than four in the
348
+ // current Unicode tables. make_unicode_casefold.py checks that
349
+ // the cycles are not too long, and we double-check here using depth.
350
+ if (depth > 10) {
351
+ LOG(DFATAL) << "AddFoldedRange recurses too much.";
352
+ return;
353
+ }
354
+
355
+ if (!cc->AddRange(lo, hi)) // lo-hi was already there? we're done
356
+ return;
357
+
358
+ while (lo <= hi) {
359
+ const CaseFold* f = LookupCaseFold(unicode_casefold, num_unicode_casefold, lo);
360
+ if (f == NULL) // lo has no fold, nor does anything above lo
361
+ break;
362
+ if (lo < f->lo) { // lo has no fold; next rune with a fold is f->lo
363
+ lo = f->lo;
364
+ continue;
365
+ }
366
+
367
+ // Add in the result of folding the range lo - f->hi
368
+ // and that range's fold, recursively.
369
+ Rune lo1 = lo;
370
+ Rune hi1 = std::min<Rune>(hi, f->hi);
371
+ switch (f->delta) {
372
+ default:
373
+ lo1 += f->delta;
374
+ hi1 += f->delta;
375
+ break;
376
+ case EvenOdd:
377
+ if (lo1%2 == 1)
378
+ lo1--;
379
+ if (hi1%2 == 0)
380
+ hi1++;
381
+ break;
382
+ case OddEven:
383
+ if (lo1%2 == 0)
384
+ lo1--;
385
+ if (hi1%2 == 1)
386
+ hi1++;
387
+ break;
388
+ }
389
+ AddFoldedRange(cc, lo1, hi1, depth+1);
390
+
391
+ // Pick up where this fold left off.
392
+ lo = f->hi + 1;
393
+ }
394
+ }
395
+
396
+ // Pushes the literal rune r onto the stack.
397
+ bool Regexp::ParseState::PushLiteral(Rune r) {
398
+ // Do case folding if needed.
399
+ if ((flags_ & FoldCase) && CycleFoldRune(r) != r) {
400
+ Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase);
401
+ re->ccb_ = new CharClassBuilder;
402
+ Rune r1 = r;
403
+ do {
404
+ if (!(flags_ & NeverNL) || r != '\n') {
405
+ re->ccb_->AddRange(r, r);
406
+ }
407
+ r = CycleFoldRune(r);
408
+ } while (r != r1);
409
+ return PushRegexp(re);
410
+ }
411
+
412
+ // Exclude newline if applicable.
413
+ if ((flags_ & NeverNL) && r == '\n')
414
+ return PushRegexp(new Regexp(kRegexpNoMatch, flags_));
415
+
416
+ // No fancy stuff worked. Ordinary literal.
417
+ if (MaybeConcatString(r, flags_))
418
+ return true;
419
+
420
+ Regexp* re = new Regexp(kRegexpLiteral, flags_);
421
+ re->rune_ = r;
422
+ return PushRegexp(re);
423
+ }
424
+
425
+ // Pushes a ^ onto the stack.
426
+ bool Regexp::ParseState::PushCaret() {
427
+ if (flags_ & OneLine) {
428
+ return PushSimpleOp(kRegexpBeginText);
429
+ }
430
+ return PushSimpleOp(kRegexpBeginLine);
431
+ }
432
+
433
+ // Pushes a \b or \B onto the stack.
434
+ bool Regexp::ParseState::PushWordBoundary(bool word) {
435
+ if (word)
436
+ return PushSimpleOp(kRegexpWordBoundary);
437
+ return PushSimpleOp(kRegexpNoWordBoundary);
438
+ }
439
+
440
+ // Pushes a $ onto the stack.
441
+ bool Regexp::ParseState::PushDollar() {
442
+ if (flags_ & OneLine) {
443
+ // Clumsy marker so that MimicsPCRE() can tell whether
444
+ // this kRegexpEndText was a $ and not a \z.
445
+ Regexp::ParseFlags oflags = flags_;
446
+ flags_ = flags_ | WasDollar;
447
+ bool ret = PushSimpleOp(kRegexpEndText);
448
+ flags_ = oflags;
449
+ return ret;
450
+ }
451
+ return PushSimpleOp(kRegexpEndLine);
452
+ }
453
+
454
+ // Pushes a . onto the stack.
455
+ bool Regexp::ParseState::PushDot() {
456
+ if ((flags_ & DotNL) && !(flags_ & NeverNL))
457
+ return PushSimpleOp(kRegexpAnyChar);
458
+ // Rewrite . into [^\n]
459
+ Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase);
460
+ re->ccb_ = new CharClassBuilder;
461
+ re->ccb_->AddRange(0, '\n' - 1);
462
+ re->ccb_->AddRange('\n' + 1, rune_max_);
463
+ return PushRegexp(re);
464
+ }
465
+
466
+ // Pushes a regexp with the given op (and no args) onto the stack.
467
+ bool Regexp::ParseState::PushSimpleOp(RegexpOp op) {
468
+ Regexp* re = new Regexp(op, flags_);
469
+ return PushRegexp(re);
470
+ }
471
+
472
+ // Pushes a repeat operator regexp onto the stack.
473
+ // A valid argument for the operator must already be on the stack.
474
+ // The char c is the name of the operator, for use in error messages.
475
+ bool Regexp::ParseState::PushRepeatOp(RegexpOp op, const StringPiece& s,
476
+ bool nongreedy) {
477
+ if (stacktop_ == NULL || IsMarker(stacktop_->op())) {
478
+ status_->set_code(kRegexpRepeatArgument);
479
+ status_->set_error_arg(s);
480
+ return false;
481
+ }
482
+ Regexp::ParseFlags fl = flags_;
483
+ if (nongreedy)
484
+ fl = fl ^ NonGreedy;
485
+
486
+ // Squash **, ++ and ??. Regexp::Star() et al. handle this too, but
487
+ // they're mostly for use during simplification, not during parsing.
488
+ if (op == stacktop_->op() && fl == stacktop_->parse_flags())
489
+ return true;
490
+
491
+ // Squash *+, *?, +*, +?, ?* and ?+. They all squash to *, so because
492
+ // op is a repeat, we just have to check that stacktop_->op() is too,
493
+ // then adjust stacktop_.
494
+ if ((stacktop_->op() == kRegexpStar ||
495
+ stacktop_->op() == kRegexpPlus ||
496
+ stacktop_->op() == kRegexpQuest) &&
497
+ fl == stacktop_->parse_flags()) {
498
+ stacktop_->op_ = kRegexpStar;
499
+ return true;
500
+ }
501
+
502
+ Regexp* re = new Regexp(op, fl);
503
+ re->AllocSub(1);
504
+ re->down_ = stacktop_->down_;
505
+ re->sub()[0] = FinishRegexp(stacktop_);
506
+ re->simple_ = re->ComputeSimple();
507
+ stacktop_ = re;
508
+ return true;
509
+ }
510
+
511
+ // RepetitionWalker reports whether the repetition regexp is valid.
512
+ // Valid means that the combination of the top-level repetition
513
+ // and any inner repetitions does not exceed n copies of the
514
+ // innermost thing.
515
+ // This rewalks the regexp tree and is called for every repetition,
516
+ // so we have to worry about inducing quadratic behavior in the parser.
517
+ // We avoid this by only using RepetitionWalker when min or max >= 2.
518
+ // In that case the depth of any >= 2 nesting can only get to 9 without
519
+ // triggering a parse error, so each subtree can only be rewalked 9 times.
520
+ class RepetitionWalker : public Regexp::Walker<int> {
521
+ public:
522
+ RepetitionWalker() {}
523
+ virtual int PreVisit(Regexp* re, int parent_arg, bool* stop);
524
+ virtual int PostVisit(Regexp* re, int parent_arg, int pre_arg,
525
+ int* child_args, int nchild_args);
526
+ virtual int ShortVisit(Regexp* re, int parent_arg);
527
+
528
+ private:
529
+ RepetitionWalker(const RepetitionWalker&) = delete;
530
+ RepetitionWalker& operator=(const RepetitionWalker&) = delete;
531
+ };
532
+
533
+ int RepetitionWalker::PreVisit(Regexp* re, int parent_arg, bool* stop) {
534
+ int arg = parent_arg;
535
+ if (re->op() == kRegexpRepeat) {
536
+ int m = re->max();
537
+ if (m < 0) {
538
+ m = re->min();
539
+ }
540
+ if (m > 0) {
541
+ arg /= m;
542
+ }
543
+ }
544
+ return arg;
545
+ }
546
+
547
+ int RepetitionWalker::PostVisit(Regexp* re, int parent_arg, int pre_arg,
548
+ int* child_args, int nchild_args) {
549
+ int arg = pre_arg;
550
+ for (int i = 0; i < nchild_args; i++) {
551
+ if (child_args[i] < arg) {
552
+ arg = child_args[i];
553
+ }
554
+ }
555
+ return arg;
556
+ }
557
+
558
+ int RepetitionWalker::ShortVisit(Regexp* re, int parent_arg) {
559
+ // Should never be called: we use Walk(), not WalkExponential().
560
+ #ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
561
+ LOG(DFATAL) << "RepetitionWalker::ShortVisit called";
562
+ #endif
563
+ return 0;
564
+ }
565
+
566
+ // Pushes a repetition regexp onto the stack.
567
+ // A valid argument for the operator must already be on the stack.
568
+ bool Regexp::ParseState::PushRepetition(int min, int max,
569
+ const StringPiece& s,
570
+ bool nongreedy) {
571
+ if ((max != -1 && max < min) || min > kMaxRepeat || max > kMaxRepeat) {
572
+ status_->set_code(kRegexpRepeatSize);
573
+ status_->set_error_arg(s);
574
+ return false;
575
+ }
576
+ if (stacktop_ == NULL || IsMarker(stacktop_->op())) {
577
+ status_->set_code(kRegexpRepeatArgument);
578
+ status_->set_error_arg(s);
579
+ return false;
580
+ }
581
+ Regexp::ParseFlags fl = flags_;
582
+ if (nongreedy)
583
+ fl = fl ^ NonGreedy;
584
+ Regexp* re = new Regexp(kRegexpRepeat, fl);
585
+ re->min_ = min;
586
+ re->max_ = max;
587
+ re->AllocSub(1);
588
+ re->down_ = stacktop_->down_;
589
+ re->sub()[0] = FinishRegexp(stacktop_);
590
+ re->simple_ = re->ComputeSimple();
591
+ stacktop_ = re;
592
+ if (min >= 2 || max >= 2) {
593
+ RepetitionWalker w;
594
+ if (w.Walk(stacktop_, kMaxRepeat) == 0) {
595
+ status_->set_code(kRegexpRepeatSize);
596
+ status_->set_error_arg(s);
597
+ return false;
598
+ }
599
+ }
600
+ return true;
601
+ }
602
+
603
+ // Checks whether a particular regexp op is a marker.
604
+ bool Regexp::ParseState::IsMarker(RegexpOp op) {
605
+ return op >= kLeftParen;
606
+ }
607
+
608
+ // Processes a left parenthesis in the input.
609
+ // Pushes a marker onto the stack.
610
+ bool Regexp::ParseState::DoLeftParen(const StringPiece& name) {
611
+ Regexp* re = new Regexp(kLeftParen, flags_);
612
+ re->cap_ = ++ncap_;
613
+ if (name.data() != NULL)
614
+ re->name_ = new std::string(name);
615
+ return PushRegexp(re);
616
+ }
617
+
618
+ // Pushes a non-capturing marker onto the stack.
619
+ bool Regexp::ParseState::DoLeftParenNoCapture() {
620
+ Regexp* re = new Regexp(kLeftParen, flags_);
621
+ re->cap_ = -1;
622
+ return PushRegexp(re);
623
+ }
624
+
625
+ // Processes a vertical bar in the input.
626
+ bool Regexp::ParseState::DoVerticalBar() {
627
+ MaybeConcatString(-1, NoParseFlags);
628
+ DoConcatenation();
629
+
630
+ // Below the vertical bar is a list to alternate.
631
+ // Above the vertical bar is a list to concatenate.
632
+ // We just did the concatenation, so either swap
633
+ // the result below the vertical bar or push a new
634
+ // vertical bar on the stack.
635
+ Regexp* r1;
636
+ Regexp* r2;
637
+ if ((r1 = stacktop_) != NULL &&
638
+ (r2 = r1->down_) != NULL &&
639
+ r2->op() == kVerticalBar) {
640
+ Regexp* r3;
641
+ if ((r3 = r2->down_) != NULL &&
642
+ (r1->op() == kRegexpAnyChar || r3->op() == kRegexpAnyChar)) {
643
+ // AnyChar is above or below the vertical bar. Let it subsume
644
+ // the other when the other is Literal, CharClass or AnyChar.
645
+ if (r3->op() == kRegexpAnyChar &&
646
+ (r1->op() == kRegexpLiteral ||
647
+ r1->op() == kRegexpCharClass ||
648
+ r1->op() == kRegexpAnyChar)) {
649
+ // Discard r1.
650
+ stacktop_ = r2;
651
+ r1->Decref();
652
+ return true;
653
+ }
654
+ if (r1->op() == kRegexpAnyChar &&
655
+ (r3->op() == kRegexpLiteral ||
656
+ r3->op() == kRegexpCharClass ||
657
+ r3->op() == kRegexpAnyChar)) {
658
+ // Rearrange the stack and discard r3.
659
+ r1->down_ = r3->down_;
660
+ r2->down_ = r1;
661
+ stacktop_ = r2;
662
+ r3->Decref();
663
+ return true;
664
+ }
665
+ }
666
+ // Swap r1 below vertical bar (r2).
667
+ r1->down_ = r2->down_;
668
+ r2->down_ = r1;
669
+ stacktop_ = r2;
670
+ return true;
671
+ }
672
+ return PushSimpleOp(kVerticalBar);
673
+ }
674
+
675
+ // Processes a right parenthesis in the input.
676
+ bool Regexp::ParseState::DoRightParen() {
677
+ // Finish the current concatenation and alternation.
678
+ DoAlternation();
679
+
680
+ // The stack should be: LeftParen regexp
681
+ // Remove the LeftParen, leaving the regexp,
682
+ // parenthesized.
683
+ Regexp* r1;
684
+ Regexp* r2;
685
+ if ((r1 = stacktop_) == NULL ||
686
+ (r2 = r1->down_) == NULL ||
687
+ r2->op() != kLeftParen) {
688
+ status_->set_code(kRegexpMissingParen);
689
+ status_->set_error_arg(whole_regexp_);
690
+ return false;
691
+ }
692
+
693
+ // Pop off r1, r2. Will Decref or reuse below.
694
+ stacktop_ = r2->down_;
695
+
696
+ // Restore flags from when paren opened.
697
+ Regexp* re = r2;
698
+ flags_ = re->parse_flags();
699
+
700
+ // Rewrite LeftParen as capture if needed.
701
+ if (re->cap_ > 0) {
702
+ re->op_ = kRegexpCapture;
703
+ // re->cap_ is already set
704
+ re->AllocSub(1);
705
+ re->sub()[0] = FinishRegexp(r1);
706
+ re->simple_ = re->ComputeSimple();
707
+ } else {
708
+ re->Decref();
709
+ re = r1;
710
+ }
711
+ return PushRegexp(re);
712
+ }
713
+
714
+ // Processes the end of input, returning the final regexp.
715
+ Regexp* Regexp::ParseState::DoFinish() {
716
+ DoAlternation();
717
+ Regexp* re = stacktop_;
718
+ if (re != NULL && re->down_ != NULL) {
719
+ status_->set_code(kRegexpMissingParen);
720
+ status_->set_error_arg(whole_regexp_);
721
+ return NULL;
722
+ }
723
+ stacktop_ = NULL;
724
+ return FinishRegexp(re);
725
+ }
726
+
727
+ // Returns the leading regexp that re starts with.
728
+ // The returned Regexp* points into a piece of re,
729
+ // so it must not be used after the caller calls re->Decref().
730
+ Regexp* Regexp::LeadingRegexp(Regexp* re) {
731
+ if (re->op() == kRegexpEmptyMatch)
732
+ return NULL;
733
+ if (re->op() == kRegexpConcat && re->nsub() >= 2) {
734
+ Regexp** sub = re->sub();
735
+ if (sub[0]->op() == kRegexpEmptyMatch)
736
+ return NULL;
737
+ return sub[0];
738
+ }
739
+ return re;
740
+ }
741
+
742
+ // Removes LeadingRegexp(re) from re and returns what's left.
743
+ // Consumes the reference to re and may edit it in place.
744
+ // If caller wants to hold on to LeadingRegexp(re),
745
+ // must have already Incref'ed it.
746
+ Regexp* Regexp::RemoveLeadingRegexp(Regexp* re) {
747
+ if (re->op() == kRegexpEmptyMatch)
748
+ return re;
749
+ if (re->op() == kRegexpConcat && re->nsub() >= 2) {
750
+ Regexp** sub = re->sub();
751
+ if (sub[0]->op() == kRegexpEmptyMatch)
752
+ return re;
753
+ sub[0]->Decref();
754
+ sub[0] = NULL;
755
+ if (re->nsub() == 2) {
756
+ // Collapse concatenation to single regexp.
757
+ Regexp* nre = sub[1];
758
+ sub[1] = NULL;
759
+ re->Decref();
760
+ return nre;
761
+ }
762
+ // 3 or more -> 2 or more.
763
+ re->nsub_--;
764
+ memmove(sub, sub + 1, re->nsub_ * sizeof sub[0]);
765
+ return re;
766
+ }
767
+ Regexp::ParseFlags pf = re->parse_flags();
768
+ re->Decref();
769
+ return new Regexp(kRegexpEmptyMatch, pf);
770
+ }
771
+
772
+ // Returns the leading string that re starts with.
773
+ // The returned Rune* points into a piece of re,
774
+ // so it must not be used after the caller calls re->Decref().
775
+ Rune* Regexp::LeadingString(Regexp* re, int *nrune,
776
+ Regexp::ParseFlags *flags) {
777
+ while (re->op() == kRegexpConcat && re->nsub() > 0)
778
+ re = re->sub()[0];
779
+
780
+ *flags = static_cast<Regexp::ParseFlags>(re->parse_flags_ & Regexp::FoldCase);
781
+
782
+ if (re->op() == kRegexpLiteral) {
783
+ *nrune = 1;
784
+ return &re->rune_;
785
+ }
786
+
787
+ if (re->op() == kRegexpLiteralString) {
788
+ *nrune = re->nrunes_;
789
+ return re->runes_;
790
+ }
791
+
792
+ *nrune = 0;
793
+ return NULL;
794
+ }
795
+
796
+ // Removes the first n leading runes from the beginning of re.
797
+ // Edits re in place.
798
+ void Regexp::RemoveLeadingString(Regexp* re, int n) {
799
+ // Chase down concats to find first string.
800
+ // For regexps generated by parser, nested concats are
801
+ // flattened except when doing so would overflow the 16-bit
802
+ // limit on the size of a concatenation, so we should never
803
+ // see more than two here.
804
+ Regexp* stk[4];
805
+ size_t d = 0;
806
+ while (re->op() == kRegexpConcat) {
807
+ if (d < arraysize(stk))
808
+ stk[d++] = re;
809
+ re = re->sub()[0];
810
+ }
811
+
812
+ // Remove leading string from re.
813
+ if (re->op() == kRegexpLiteral) {
814
+ re->rune_ = 0;
815
+ re->op_ = kRegexpEmptyMatch;
816
+ } else if (re->op() == kRegexpLiteralString) {
817
+ if (n >= re->nrunes_) {
818
+ delete[] re->runes_;
819
+ re->runes_ = NULL;
820
+ re->nrunes_ = 0;
821
+ re->op_ = kRegexpEmptyMatch;
822
+ } else if (n == re->nrunes_ - 1) {
823
+ Rune rune = re->runes_[re->nrunes_ - 1];
824
+ delete[] re->runes_;
825
+ re->runes_ = NULL;
826
+ re->nrunes_ = 0;
827
+ re->rune_ = rune;
828
+ re->op_ = kRegexpLiteral;
829
+ } else {
830
+ re->nrunes_ -= n;
831
+ memmove(re->runes_, re->runes_ + n, re->nrunes_ * sizeof re->runes_[0]);
832
+ }
833
+ }
834
+
835
+ // If re is now empty, concatenations might simplify too.
836
+ while (d > 0) {
837
+ re = stk[--d];
838
+ Regexp** sub = re->sub();
839
+ if (sub[0]->op() == kRegexpEmptyMatch) {
840
+ sub[0]->Decref();
841
+ sub[0] = NULL;
842
+ // Delete first element of concat.
843
+ switch (re->nsub()) {
844
+ case 0:
845
+ case 1:
846
+ // Impossible.
847
+ LOG(DFATAL) << "Concat of " << re->nsub();
848
+ re->submany_ = NULL;
849
+ re->op_ = kRegexpEmptyMatch;
850
+ break;
851
+
852
+ case 2: {
853
+ // Replace re with sub[1].
854
+ Regexp* old = sub[1];
855
+ sub[1] = NULL;
856
+ re->Swap(old);
857
+ old->Decref();
858
+ break;
859
+ }
860
+
861
+ default:
862
+ // Slide down.
863
+ re->nsub_--;
864
+ memmove(sub, sub + 1, re->nsub_ * sizeof sub[0]);
865
+ break;
866
+ }
867
+ }
868
+ }
869
+ }
870
+
871
+ // In the context of factoring alternations, a Splice is: a factored prefix or
872
+ // merged character class computed by one iteration of one round of factoring;
873
+ // the span of subexpressions of the alternation to be "spliced" (i.e. removed
874
+ // and replaced); and, for a factored prefix, the number of suffixes after any
875
+ // factoring that might have subsequently been performed on them. For a merged
876
+ // character class, there are no suffixes, of course, so the field is ignored.
877
+ struct Splice {
878
+ Splice(Regexp* prefix, Regexp** sub, int nsub)
879
+ : prefix(prefix),
880
+ sub(sub),
881
+ nsub(nsub),
882
+ nsuffix(-1) {}
883
+
884
+ Regexp* prefix;
885
+ Regexp** sub;
886
+ int nsub;
887
+ int nsuffix;
888
+ };
889
+
890
+ // Named so because it is used to implement an explicit stack, a Frame is: the
891
+ // span of subexpressions of the alternation to be factored; the current round
892
+ // of factoring; any Splices computed; and, for a factored prefix, an iterator
893
+ // to the next Splice to be factored (i.e. in another Frame) because suffixes.
894
+ struct Frame {
895
+ Frame(Regexp** sub, int nsub)
896
+ : sub(sub),
897
+ nsub(nsub),
898
+ round(0) {}
899
+
900
+ Regexp** sub;
901
+ int nsub;
902
+ int round;
903
+ std::vector<Splice> splices;
904
+ int spliceidx;
905
+ };
906
+
907
+ // Bundled into a class for friend access to Regexp without needing to declare
908
+ // (or define) Splice in regexp.h.
909
+ class FactorAlternationImpl {
910
+ public:
911
+ static void Round1(Regexp** sub, int nsub,
912
+ Regexp::ParseFlags flags,
913
+ std::vector<Splice>* splices);
914
+ static void Round2(Regexp** sub, int nsub,
915
+ Regexp::ParseFlags flags,
916
+ std::vector<Splice>* splices);
917
+ static void Round3(Regexp** sub, int nsub,
918
+ Regexp::ParseFlags flags,
919
+ std::vector<Splice>* splices);
920
+ };
921
+
922
+ // Factors common prefixes from alternation.
923
+ // For example,
924
+ // ABC|ABD|AEF|BCX|BCY
925
+ // simplifies to
926
+ // A(B(C|D)|EF)|BC(X|Y)
927
+ // and thence to
928
+ // A(B[CD]|EF)|BC[XY]
929
+ //
930
+ // Rewrites sub to contain simplified list to alternate and returns
931
+ // the new length of sub. Adjusts reference counts accordingly
932
+ // (incoming sub[i] decremented, outgoing sub[i] incremented).
933
+ int Regexp::FactorAlternation(Regexp** sub, int nsub, ParseFlags flags) {
934
+ std::vector<Frame> stk;
935
+ stk.emplace_back(sub, nsub);
936
+
937
+ for (;;) {
938
+ auto& sub = stk.back().sub;
939
+ auto& nsub = stk.back().nsub;
940
+ auto& round = stk.back().round;
941
+ auto& splices = stk.back().splices;
942
+ auto& spliceidx = stk.back().spliceidx;
943
+
944
+ if (splices.empty()) {
945
+ // Advance to the next round of factoring. Note that this covers
946
+ // the initialised state: when splices is empty and round is 0.
947
+ round++;
948
+ } else if (spliceidx < static_cast<int>(splices.size())) {
949
+ // We have at least one more Splice to factor. Recurse logically.
950
+ stk.emplace_back(splices[spliceidx].sub, splices[spliceidx].nsub);
951
+ continue;
952
+ } else {
953
+ // We have no more Splices to factor. Apply them.
954
+ auto iter = splices.begin();
955
+ int out = 0;
956
+ for (int i = 0; i < nsub; ) {
957
+ // Copy until we reach where the next Splice begins.
958
+ while (sub + i < iter->sub)
959
+ sub[out++] = sub[i++];
960
+ switch (round) {
961
+ case 1:
962
+ case 2: {
963
+ // Assemble the Splice prefix and the suffixes.
964
+ Regexp* re[2];
965
+ re[0] = iter->prefix;
966
+ re[1] = Regexp::AlternateNoFactor(iter->sub, iter->nsuffix, flags);
967
+ sub[out++] = Regexp::Concat(re, 2, flags);
968
+ i += iter->nsub;
969
+ break;
970
+ }
971
+ case 3:
972
+ // Just use the Splice prefix.
973
+ sub[out++] = iter->prefix;
974
+ i += iter->nsub;
975
+ break;
976
+ default:
977
+ LOG(DFATAL) << "unknown round: " << round;
978
+ break;
979
+ }
980
+ // If we are done, copy until the end of sub.
981
+ if (++iter == splices.end()) {
982
+ while (i < nsub)
983
+ sub[out++] = sub[i++];
984
+ }
985
+ }
986
+ splices.clear();
987
+ nsub = out;
988
+ // Advance to the next round of factoring.
989
+ round++;
990
+ }
991
+
992
+ switch (round) {
993
+ case 1:
994
+ FactorAlternationImpl::Round1(sub, nsub, flags, &splices);
995
+ break;
996
+ case 2:
997
+ FactorAlternationImpl::Round2(sub, nsub, flags, &splices);
998
+ break;
999
+ case 3:
1000
+ FactorAlternationImpl::Round3(sub, nsub, flags, &splices);
1001
+ break;
1002
+ case 4:
1003
+ if (stk.size() == 1) {
1004
+ // We are at the top of the stack. Just return.
1005
+ return nsub;
1006
+ } else {
1007
+ // Pop the stack and set the number of suffixes.
1008
+ // (Note that references will be invalidated!)
1009
+ int nsuffix = nsub;
1010
+ stk.pop_back();
1011
+ stk.back().splices[stk.back().spliceidx].nsuffix = nsuffix;
1012
+ ++stk.back().spliceidx;
1013
+ continue;
1014
+ }
1015
+ default:
1016
+ LOG(DFATAL) << "unknown round: " << round;
1017
+ break;
1018
+ }
1019
+
1020
+ // Set spliceidx depending on whether we have Splices to factor.
1021
+ if (splices.empty() || round == 3) {
1022
+ spliceidx = static_cast<int>(splices.size());
1023
+ } else {
1024
+ spliceidx = 0;
1025
+ }
1026
+ }
1027
+ }
1028
+
1029
+ void FactorAlternationImpl::Round1(Regexp** sub, int nsub,
1030
+ Regexp::ParseFlags flags,
1031
+ std::vector<Splice>* splices) {
1032
+ // Round 1: Factor out common literal prefixes.
1033
+ int start = 0;
1034
+ Rune* rune = NULL;
1035
+ int nrune = 0;
1036
+ Regexp::ParseFlags runeflags = Regexp::NoParseFlags;
1037
+ for (int i = 0; i <= nsub; i++) {
1038
+ // Invariant: sub[start:i] consists of regexps that all
1039
+ // begin with rune[0:nrune].
1040
+ Rune* rune_i = NULL;
1041
+ int nrune_i = 0;
1042
+ Regexp::ParseFlags runeflags_i = Regexp::NoParseFlags;
1043
+ if (i < nsub) {
1044
+ rune_i = Regexp::LeadingString(sub[i], &nrune_i, &runeflags_i);
1045
+ if (runeflags_i == runeflags) {
1046
+ int same = 0;
1047
+ while (same < nrune && same < nrune_i && rune[same] == rune_i[same])
1048
+ same++;
1049
+ if (same > 0) {
1050
+ // Matches at least one rune in current range. Keep going around.
1051
+ nrune = same;
1052
+ continue;
1053
+ }
1054
+ }
1055
+ }
1056
+
1057
+ // Found end of a run with common leading literal string:
1058
+ // sub[start:i] all begin with rune[0:nrune],
1059
+ // but sub[i] does not even begin with rune[0].
1060
+ if (i == start) {
1061
+ // Nothing to do - first iteration.
1062
+ } else if (i == start+1) {
1063
+ // Just one: don't bother factoring.
1064
+ } else {
1065
+ Regexp* prefix = Regexp::LiteralString(rune, nrune, runeflags);
1066
+ for (int j = start; j < i; j++)
1067
+ Regexp::RemoveLeadingString(sub[j], nrune);
1068
+ splices->emplace_back(prefix, sub + start, i - start);
1069
+ }
1070
+
1071
+ // Prepare for next iteration (if there is one).
1072
+ if (i < nsub) {
1073
+ start = i;
1074
+ rune = rune_i;
1075
+ nrune = nrune_i;
1076
+ runeflags = runeflags_i;
1077
+ }
1078
+ }
1079
+ }
1080
+
1081
+ void FactorAlternationImpl::Round2(Regexp** sub, int nsub,
1082
+ Regexp::ParseFlags flags,
1083
+ std::vector<Splice>* splices) {
1084
+ // Round 2: Factor out common simple prefixes,
1085
+ // just the first piece of each concatenation.
1086
+ // This will be good enough a lot of the time.
1087
+ //
1088
+ // Complex subexpressions (e.g. involving quantifiers)
1089
+ // are not safe to factor because that collapses their
1090
+ // distinct paths through the automaton, which affects
1091
+ // correctness in some cases.
1092
+ int start = 0;
1093
+ Regexp* first = NULL;
1094
+ for (int i = 0; i <= nsub; i++) {
1095
+ // Invariant: sub[start:i] consists of regexps that all
1096
+ // begin with first.
1097
+ Regexp* first_i = NULL;
1098
+ if (i < nsub) {
1099
+ first_i = Regexp::LeadingRegexp(sub[i]);
1100
+ if (first != NULL &&
1101
+ // first must be an empty-width op
1102
+ // OR a char class, any char or any byte
1103
+ // OR a fixed repeat of a literal, char class, any char or any byte.
1104
+ (first->op() == kRegexpBeginLine ||
1105
+ first->op() == kRegexpEndLine ||
1106
+ first->op() == kRegexpWordBoundary ||
1107
+ first->op() == kRegexpNoWordBoundary ||
1108
+ first->op() == kRegexpBeginText ||
1109
+ first->op() == kRegexpEndText ||
1110
+ first->op() == kRegexpCharClass ||
1111
+ first->op() == kRegexpAnyChar ||
1112
+ first->op() == kRegexpAnyByte ||
1113
+ (first->op() == kRegexpRepeat &&
1114
+ first->min() == first->max() &&
1115
+ (first->sub()[0]->op() == kRegexpLiteral ||
1116
+ first->sub()[0]->op() == kRegexpCharClass ||
1117
+ first->sub()[0]->op() == kRegexpAnyChar ||
1118
+ first->sub()[0]->op() == kRegexpAnyByte))) &&
1119
+ Regexp::Equal(first, first_i))
1120
+ continue;
1121
+ }
1122
+
1123
+ // Found end of a run with common leading regexp:
1124
+ // sub[start:i] all begin with first,
1125
+ // but sub[i] does not.
1126
+ if (i == start) {
1127
+ // Nothing to do - first iteration.
1128
+ } else if (i == start+1) {
1129
+ // Just one: don't bother factoring.
1130
+ } else {
1131
+ Regexp* prefix = first->Incref();
1132
+ for (int j = start; j < i; j++)
1133
+ sub[j] = Regexp::RemoveLeadingRegexp(sub[j]);
1134
+ splices->emplace_back(prefix, sub + start, i - start);
1135
+ }
1136
+
1137
+ // Prepare for next iteration (if there is one).
1138
+ if (i < nsub) {
1139
+ start = i;
1140
+ first = first_i;
1141
+ }
1142
+ }
1143
+ }
1144
+
1145
+ void FactorAlternationImpl::Round3(Regexp** sub, int nsub,
1146
+ Regexp::ParseFlags flags,
1147
+ std::vector<Splice>* splices) {
1148
+ // Round 3: Merge runs of literals and/or character classes.
1149
+ int start = 0;
1150
+ Regexp* first = NULL;
1151
+ for (int i = 0; i <= nsub; i++) {
1152
+ // Invariant: sub[start:i] consists of regexps that all
1153
+ // are either literals (i.e. runes) or character classes.
1154
+ Regexp* first_i = NULL;
1155
+ if (i < nsub) {
1156
+ first_i = sub[i];
1157
+ if (first != NULL &&
1158
+ (first->op() == kRegexpLiteral ||
1159
+ first->op() == kRegexpCharClass) &&
1160
+ (first_i->op() == kRegexpLiteral ||
1161
+ first_i->op() == kRegexpCharClass))
1162
+ continue;
1163
+ }
1164
+
1165
+ // Found end of a run of Literal/CharClass:
1166
+ // sub[start:i] all are either one or the other,
1167
+ // but sub[i] is not.
1168
+ if (i == start) {
1169
+ // Nothing to do - first iteration.
1170
+ } else if (i == start+1) {
1171
+ // Just one: don't bother factoring.
1172
+ } else {
1173
+ CharClassBuilder ccb;
1174
+ for (int j = start; j < i; j++) {
1175
+ Regexp* re = sub[j];
1176
+ if (re->op() == kRegexpCharClass) {
1177
+ CharClass* cc = re->cc();
1178
+ for (CharClass::iterator it = cc->begin(); it != cc->end(); ++it)
1179
+ ccb.AddRange(it->lo, it->hi);
1180
+ } else if (re->op() == kRegexpLiteral) {
1181
+ ccb.AddRangeFlags(re->rune(), re->rune(), re->parse_flags());
1182
+ } else {
1183
+ LOG(DFATAL) << "RE2: unexpected op: " << re->op() << " "
1184
+ << re->ToString();
1185
+ }
1186
+ re->Decref();
1187
+ }
1188
+ Regexp* re = Regexp::NewCharClass(ccb.GetCharClass(), flags);
1189
+ splices->emplace_back(re, sub + start, i - start);
1190
+ }
1191
+
1192
+ // Prepare for next iteration (if there is one).
1193
+ if (i < nsub) {
1194
+ start = i;
1195
+ first = first_i;
1196
+ }
1197
+ }
1198
+ }
1199
+
1200
+ // Collapse the regexps on top of the stack, down to the
1201
+ // first marker, into a new op node (op == kRegexpAlternate
1202
+ // or op == kRegexpConcat).
1203
+ void Regexp::ParseState::DoCollapse(RegexpOp op) {
1204
+ // Scan backward to marker, counting children of composite.
1205
+ int n = 0;
1206
+ Regexp* next = NULL;
1207
+ Regexp* sub;
1208
+ for (sub = stacktop_; sub != NULL && !IsMarker(sub->op()); sub = next) {
1209
+ next = sub->down_;
1210
+ if (sub->op_ == op)
1211
+ n += sub->nsub_;
1212
+ else
1213
+ n++;
1214
+ }
1215
+
1216
+ // If there's just one child, leave it alone.
1217
+ // (Concat of one thing is that one thing; alternate of one thing is same.)
1218
+ if (stacktop_ != NULL && stacktop_->down_ == next)
1219
+ return;
1220
+
1221
+ // Construct op (alternation or concatenation), flattening op of op.
1222
+ PODArray<Regexp*> subs(n);
1223
+ next = NULL;
1224
+ int i = n;
1225
+ for (sub = stacktop_; sub != NULL && !IsMarker(sub->op()); sub = next) {
1226
+ next = sub->down_;
1227
+ if (sub->op_ == op) {
1228
+ Regexp** sub_subs = sub->sub();
1229
+ for (int k = sub->nsub_ - 1; k >= 0; k--)
1230
+ subs[--i] = sub_subs[k]->Incref();
1231
+ sub->Decref();
1232
+ } else {
1233
+ subs[--i] = FinishRegexp(sub);
1234
+ }
1235
+ }
1236
+
1237
+ Regexp* re = ConcatOrAlternate(op, subs.data(), n, flags_, true);
1238
+ re->simple_ = re->ComputeSimple();
1239
+ re->down_ = next;
1240
+ stacktop_ = re;
1241
+ }
1242
+
1243
+ // Finishes the current concatenation,
1244
+ // collapsing it into a single regexp on the stack.
1245
+ void Regexp::ParseState::DoConcatenation() {
1246
+ Regexp* r1 = stacktop_;
1247
+ if (r1 == NULL || IsMarker(r1->op())) {
1248
+ // empty concatenation is special case
1249
+ Regexp* re = new Regexp(kRegexpEmptyMatch, flags_);
1250
+ PushRegexp(re);
1251
+ }
1252
+ DoCollapse(kRegexpConcat);
1253
+ }
1254
+
1255
+ // Finishes the current alternation,
1256
+ // collapsing it to a single regexp on the stack.
1257
+ void Regexp::ParseState::DoAlternation() {
1258
+ DoVerticalBar();
1259
+ // Now stack top is kVerticalBar.
1260
+ Regexp* r1 = stacktop_;
1261
+ stacktop_ = r1->down_;
1262
+ r1->Decref();
1263
+ DoCollapse(kRegexpAlternate);
1264
+ }
1265
+
1266
+ // Incremental conversion of concatenated literals into strings.
1267
+ // If top two elements on stack are both literal or string,
1268
+ // collapse into single string.
1269
+ // Don't walk down the stack -- the parser calls this frequently
1270
+ // enough that below the bottom two is known to be collapsed.
1271
+ // Only called when another regexp is about to be pushed
1272
+ // on the stack, so that the topmost literal is not being considered.
1273
+ // (Otherwise ab* would turn into (ab)*.)
1274
+ // If r >= 0, consider pushing a literal r on the stack.
1275
+ // Return whether that happened.
1276
+ bool Regexp::ParseState::MaybeConcatString(int r, ParseFlags flags) {
1277
+ Regexp* re1;
1278
+ Regexp* re2;
1279
+ if ((re1 = stacktop_) == NULL || (re2 = re1->down_) == NULL)
1280
+ return false;
1281
+
1282
+ if (re1->op_ != kRegexpLiteral && re1->op_ != kRegexpLiteralString)
1283
+ return false;
1284
+ if (re2->op_ != kRegexpLiteral && re2->op_ != kRegexpLiteralString)
1285
+ return false;
1286
+ if ((re1->parse_flags_ & FoldCase) != (re2->parse_flags_ & FoldCase))
1287
+ return false;
1288
+
1289
+ if (re2->op_ == kRegexpLiteral) {
1290
+ // convert into string
1291
+ Rune rune = re2->rune_;
1292
+ re2->op_ = kRegexpLiteralString;
1293
+ re2->nrunes_ = 0;
1294
+ re2->runes_ = NULL;
1295
+ re2->AddRuneToString(rune);
1296
+ }
1297
+
1298
+ // push re1 into re2.
1299
+ if (re1->op_ == kRegexpLiteral) {
1300
+ re2->AddRuneToString(re1->rune_);
1301
+ } else {
1302
+ for (int i = 0; i < re1->nrunes_; i++)
1303
+ re2->AddRuneToString(re1->runes_[i]);
1304
+ re1->nrunes_ = 0;
1305
+ delete[] re1->runes_;
1306
+ re1->runes_ = NULL;
1307
+ }
1308
+
1309
+ // reuse re1 if possible
1310
+ if (r >= 0) {
1311
+ re1->op_ = kRegexpLiteral;
1312
+ re1->rune_ = r;
1313
+ re1->parse_flags_ = static_cast<uint16_t>(flags);
1314
+ return true;
1315
+ }
1316
+
1317
+ stacktop_ = re2;
1318
+ re1->Decref();
1319
+ return false;
1320
+ }
1321
+
1322
+ // Lexing routines.
1323
+
1324
+ // Parses a decimal integer, storing it in *np.
1325
+ // Sets *s to span the remainder of the string.
1326
+ static bool ParseInteger(StringPiece* s, int* np) {
1327
+ if (s->empty() || !isdigit((*s)[0] & 0xFF))
1328
+ return false;
1329
+ // Disallow leading zeros.
1330
+ if (s->size() >= 2 && (*s)[0] == '0' && isdigit((*s)[1] & 0xFF))
1331
+ return false;
1332
+ int n = 0;
1333
+ int c;
1334
+ while (!s->empty() && isdigit(c = (*s)[0] & 0xFF)) {
1335
+ // Avoid overflow.
1336
+ if (n >= 100000000)
1337
+ return false;
1338
+ n = n*10 + c - '0';
1339
+ s->remove_prefix(1); // digit
1340
+ }
1341
+ *np = n;
1342
+ return true;
1343
+ }
1344
+
1345
+ // Parses a repetition suffix like {1,2} or {2} or {2,}.
1346
+ // Sets *s to span the remainder of the string on success.
1347
+ // Sets *lo and *hi to the given range.
1348
+ // In the case of {2,}, the high number is unbounded;
1349
+ // sets *hi to -1 to signify this.
1350
+ // {,2} is NOT a valid suffix.
1351
+ // The Maybe in the name signifies that the regexp parse
1352
+ // doesn't fail even if ParseRepetition does, so the StringPiece
1353
+ // s must NOT be edited unless MaybeParseRepetition returns true.
1354
+ static bool MaybeParseRepetition(StringPiece* sp, int* lo, int* hi) {
1355
+ StringPiece s = *sp;
1356
+ if (s.empty() || s[0] != '{')
1357
+ return false;
1358
+ s.remove_prefix(1); // '{'
1359
+ if (!ParseInteger(&s, lo))
1360
+ return false;
1361
+ if (s.empty())
1362
+ return false;
1363
+ if (s[0] == ',') {
1364
+ s.remove_prefix(1); // ','
1365
+ if (s.empty())
1366
+ return false;
1367
+ if (s[0] == '}') {
1368
+ // {2,} means at least 2
1369
+ *hi = -1;
1370
+ } else {
1371
+ // {2,4} means 2, 3, or 4.
1372
+ if (!ParseInteger(&s, hi))
1373
+ return false;
1374
+ }
1375
+ } else {
1376
+ // {2} means exactly two
1377
+ *hi = *lo;
1378
+ }
1379
+ if (s.empty() || s[0] != '}')
1380
+ return false;
1381
+ s.remove_prefix(1); // '}'
1382
+ *sp = s;
1383
+ return true;
1384
+ }
1385
+
1386
+ // Removes the next Rune from the StringPiece and stores it in *r.
1387
+ // Returns number of bytes removed from sp.
1388
+ // Behaves as though there is a terminating NUL at the end of sp.
1389
+ // Argument order is backwards from usual Google style
1390
+ // but consistent with chartorune.
1391
+ static int StringPieceToRune(Rune *r, StringPiece *sp, RegexpStatus* status) {
1392
+ // fullrune() takes int, not size_t. However, it just looks
1393
+ // at the leading byte and treats any length >= 4 the same.
1394
+ if (fullrune(sp->data(), static_cast<int>(std::min(size_t{4}, sp->size())))) {
1395
+ int n = chartorune(r, sp->data());
1396
+ // Some copies of chartorune have a bug that accepts
1397
+ // encodings of values in (10FFFF, 1FFFFF] as valid.
1398
+ // Those values break the character class algorithm,
1399
+ // which assumes Runemax is the largest rune.
1400
+ if (*r > Runemax) {
1401
+ n = 1;
1402
+ *r = Runeerror;
1403
+ }
1404
+ if (!(n == 1 && *r == Runeerror)) { // no decoding error
1405
+ sp->remove_prefix(n);
1406
+ return n;
1407
+ }
1408
+ }
1409
+
1410
+ status->set_code(kRegexpBadUTF8);
1411
+ status->set_error_arg(StringPiece());
1412
+ return -1;
1413
+ }
1414
+
1415
+ // Return whether name is valid UTF-8.
1416
+ // If not, set status to kRegexpBadUTF8.
1417
+ static bool IsValidUTF8(const StringPiece& s, RegexpStatus* status) {
1418
+ StringPiece t = s;
1419
+ Rune r;
1420
+ while (!t.empty()) {
1421
+ if (StringPieceToRune(&r, &t, status) < 0)
1422
+ return false;
1423
+ }
1424
+ return true;
1425
+ }
1426
+
1427
+ // Is c a hex digit?
1428
+ static int IsHex(int c) {
1429
+ return ('0' <= c && c <= '9') ||
1430
+ ('A' <= c && c <= 'F') ||
1431
+ ('a' <= c && c <= 'f');
1432
+ }
1433
+
1434
+ // Convert hex digit to value.
1435
+ static int UnHex(int c) {
1436
+ if ('0' <= c && c <= '9')
1437
+ return c - '0';
1438
+ if ('A' <= c && c <= 'F')
1439
+ return c - 'A' + 10;
1440
+ if ('a' <= c && c <= 'f')
1441
+ return c - 'a' + 10;
1442
+ LOG(DFATAL) << "Bad hex digit " << c;
1443
+ return 0;
1444
+ }
1445
+
1446
+ // Parse an escape sequence (e.g., \n, \{).
1447
+ // Sets *s to span the remainder of the string.
1448
+ // Sets *rp to the named character.
1449
+ static bool ParseEscape(StringPiece* s, Rune* rp,
1450
+ RegexpStatus* status, int rune_max) {
1451
+ const char* begin = s->data();
1452
+ if (s->empty() || (*s)[0] != '\\') {
1453
+ // Should not happen - caller always checks.
1454
+ status->set_code(kRegexpInternalError);
1455
+ status->set_error_arg(StringPiece());
1456
+ return false;
1457
+ }
1458
+ if (s->size() == 1) {
1459
+ status->set_code(kRegexpTrailingBackslash);
1460
+ status->set_error_arg(StringPiece());
1461
+ return false;
1462
+ }
1463
+ Rune c, c1;
1464
+ s->remove_prefix(1); // backslash
1465
+ if (StringPieceToRune(&c, s, status) < 0)
1466
+ return false;
1467
+ int code;
1468
+ switch (c) {
1469
+ default:
1470
+ if (c < Runeself && !isalpha(c) && !isdigit(c)) {
1471
+ // Escaped non-word characters are always themselves.
1472
+ // PCRE is not quite so rigorous: it accepts things like
1473
+ // \q, but we don't. We once rejected \_, but too many
1474
+ // programs and people insist on using it, so allow \_.
1475
+ *rp = c;
1476
+ return true;
1477
+ }
1478
+ goto BadEscape;
1479
+
1480
+ // Octal escapes.
1481
+ case '1':
1482
+ case '2':
1483
+ case '3':
1484
+ case '4':
1485
+ case '5':
1486
+ case '6':
1487
+ case '7':
1488
+ // Single non-zero octal digit is a backreference; not supported.
1489
+ if (s->empty() || (*s)[0] < '0' || (*s)[0] > '7')
1490
+ goto BadEscape;
1491
+ FALLTHROUGH_INTENDED;
1492
+ case '0':
1493
+ // consume up to three octal digits; already have one.
1494
+ code = c - '0';
1495
+ if (!s->empty() && '0' <= (c = (*s)[0]) && c <= '7') {
1496
+ code = code * 8 + c - '0';
1497
+ s->remove_prefix(1); // digit
1498
+ if (!s->empty()) {
1499
+ c = (*s)[0];
1500
+ if ('0' <= c && c <= '7') {
1501
+ code = code * 8 + c - '0';
1502
+ s->remove_prefix(1); // digit
1503
+ }
1504
+ }
1505
+ }
1506
+ if (code > rune_max)
1507
+ goto BadEscape;
1508
+ *rp = code;
1509
+ return true;
1510
+
1511
+ // Hexadecimal escapes
1512
+ case 'x':
1513
+ if (s->empty())
1514
+ goto BadEscape;
1515
+ if (StringPieceToRune(&c, s, status) < 0)
1516
+ return false;
1517
+ if (c == '{') {
1518
+ // Any number of digits in braces.
1519
+ // Update n as we consume the string, so that
1520
+ // the whole thing gets shown in the error message.
1521
+ // Perl accepts any text at all; it ignores all text
1522
+ // after the first non-hex digit. We require only hex digits,
1523
+ // and at least one.
1524
+ if (StringPieceToRune(&c, s, status) < 0)
1525
+ return false;
1526
+ int nhex = 0;
1527
+ code = 0;
1528
+ while (IsHex(c)) {
1529
+ nhex++;
1530
+ code = code * 16 + UnHex(c);
1531
+ if (code > rune_max)
1532
+ goto BadEscape;
1533
+ if (s->empty())
1534
+ goto BadEscape;
1535
+ if (StringPieceToRune(&c, s, status) < 0)
1536
+ return false;
1537
+ }
1538
+ if (c != '}' || nhex == 0)
1539
+ goto BadEscape;
1540
+ *rp = code;
1541
+ return true;
1542
+ }
1543
+ // Easy case: two hex digits.
1544
+ if (s->empty())
1545
+ goto BadEscape;
1546
+ if (StringPieceToRune(&c1, s, status) < 0)
1547
+ return false;
1548
+ if (!IsHex(c) || !IsHex(c1))
1549
+ goto BadEscape;
1550
+ *rp = UnHex(c) * 16 + UnHex(c1);
1551
+ return true;
1552
+
1553
+ // C escapes.
1554
+ case 'n':
1555
+ *rp = '\n';
1556
+ return true;
1557
+ case 'r':
1558
+ *rp = '\r';
1559
+ return true;
1560
+ case 't':
1561
+ *rp = '\t';
1562
+ return true;
1563
+
1564
+ // Less common C escapes.
1565
+ case 'a':
1566
+ *rp = '\a';
1567
+ return true;
1568
+ case 'f':
1569
+ *rp = '\f';
1570
+ return true;
1571
+ case 'v':
1572
+ *rp = '\v';
1573
+ return true;
1574
+
1575
+ // This code is disabled to avoid misparsing
1576
+ // the Perl word-boundary \b as a backspace
1577
+ // when in POSIX regexp mode. Surprisingly,
1578
+ // in Perl, \b means word-boundary but [\b]
1579
+ // means backspace. We don't support that:
1580
+ // if you want a backspace embed a literal
1581
+ // backspace character or use \x08.
1582
+ //
1583
+ // case 'b':
1584
+ // *rp = '\b';
1585
+ // return true;
1586
+ }
1587
+
1588
+ LOG(DFATAL) << "Not reached in ParseEscape.";
1589
+
1590
+ BadEscape:
1591
+ // Unrecognized escape sequence.
1592
+ status->set_code(kRegexpBadEscape);
1593
+ status->set_error_arg(
1594
+ StringPiece(begin, static_cast<size_t>(s->data() - begin)));
1595
+ return false;
1596
+ }
1597
+
1598
+ // Add a range to the character class, but exclude newline if asked.
1599
+ // Also handle case folding.
1600
+ void CharClassBuilder::AddRangeFlags(
1601
+ Rune lo, Rune hi, Regexp::ParseFlags parse_flags) {
1602
+
1603
+ // Take out \n if the flags say so.
1604
+ bool cutnl = !(parse_flags & Regexp::ClassNL) ||
1605
+ (parse_flags & Regexp::NeverNL);
1606
+ if (cutnl && lo <= '\n' && '\n' <= hi) {
1607
+ if (lo < '\n')
1608
+ AddRangeFlags(lo, '\n' - 1, parse_flags);
1609
+ if (hi > '\n')
1610
+ AddRangeFlags('\n' + 1, hi, parse_flags);
1611
+ return;
1612
+ }
1613
+
1614
+ // If folding case, add fold-equivalent characters too.
1615
+ if (parse_flags & Regexp::FoldCase)
1616
+ AddFoldedRange(this, lo, hi, 0);
1617
+ else
1618
+ AddRange(lo, hi);
1619
+ }
1620
+
1621
+ // Look for a group with the given name.
1622
+ static const UGroup* LookupGroup(const StringPiece& name,
1623
+ const UGroup *groups, int ngroups) {
1624
+ // Simple name lookup.
1625
+ for (int i = 0; i < ngroups; i++)
1626
+ if (StringPiece(groups[i].name) == name)
1627
+ return &groups[i];
1628
+ return NULL;
1629
+ }
1630
+
1631
+ // Look for a POSIX group with the given name (e.g., "[:^alpha:]")
1632
+ static const UGroup* LookupPosixGroup(const StringPiece& name) {
1633
+ return LookupGroup(name, posix_groups, num_posix_groups);
1634
+ }
1635
+
1636
+ static const UGroup* LookupPerlGroup(const StringPiece& name) {
1637
+ return LookupGroup(name, perl_groups, num_perl_groups);
1638
+ }
1639
+
1640
+ #if !defined(RE2_USE_ICU)
1641
+ // Fake UGroup containing all Runes
1642
+ static URange16 any16[] = { { 0, 65535 } };
1643
+ static URange32 any32[] = { { 65536, Runemax } };
1644
+ static UGroup anygroup = { "Any", +1, any16, 1, any32, 1 };
1645
+
1646
+ // Look for a Unicode group with the given name (e.g., "Han")
1647
+ static const UGroup* LookupUnicodeGroup(const StringPiece& name) {
1648
+ // Special case: "Any" means any.
1649
+ if (name == StringPiece("Any"))
1650
+ return &anygroup;
1651
+ return LookupGroup(name, unicode_groups, num_unicode_groups);
1652
+ }
1653
+ #endif
1654
+
1655
+ // Add a UGroup or its negation to the character class.
1656
+ static void AddUGroup(CharClassBuilder *cc, const UGroup *g, int sign,
1657
+ Regexp::ParseFlags parse_flags) {
1658
+ if (sign == +1) {
1659
+ for (int i = 0; i < g->nr16; i++) {
1660
+ cc->AddRangeFlags(g->r16[i].lo, g->r16[i].hi, parse_flags);
1661
+ }
1662
+ for (int i = 0; i < g->nr32; i++) {
1663
+ cc->AddRangeFlags(g->r32[i].lo, g->r32[i].hi, parse_flags);
1664
+ }
1665
+ } else {
1666
+ if (parse_flags & Regexp::FoldCase) {
1667
+ // Normally adding a case-folded group means
1668
+ // adding all the extra fold-equivalent runes too.
1669
+ // But if we're adding the negation of the group,
1670
+ // we have to exclude all the runes that are fold-equivalent
1671
+ // to what's already missing. Too hard, so do in two steps.
1672
+ CharClassBuilder ccb1;
1673
+ AddUGroup(&ccb1, g, +1, parse_flags);
1674
+ // If the flags say to take out \n, put it in, so that negating will take it out.
1675
+ // Normally AddRangeFlags does this, but we're bypassing AddRangeFlags.
1676
+ bool cutnl = !(parse_flags & Regexp::ClassNL) ||
1677
+ (parse_flags & Regexp::NeverNL);
1678
+ if (cutnl) {
1679
+ ccb1.AddRange('\n', '\n');
1680
+ }
1681
+ ccb1.Negate();
1682
+ cc->AddCharClass(&ccb1);
1683
+ return;
1684
+ }
1685
+ int next = 0;
1686
+ for (int i = 0; i < g->nr16; i++) {
1687
+ if (next < g->r16[i].lo)
1688
+ cc->AddRangeFlags(next, g->r16[i].lo - 1, parse_flags);
1689
+ next = g->r16[i].hi + 1;
1690
+ }
1691
+ for (int i = 0; i < g->nr32; i++) {
1692
+ if (next < g->r32[i].lo)
1693
+ cc->AddRangeFlags(next, g->r32[i].lo - 1, parse_flags);
1694
+ next = g->r32[i].hi + 1;
1695
+ }
1696
+ if (next <= Runemax)
1697
+ cc->AddRangeFlags(next, Runemax, parse_flags);
1698
+ }
1699
+ }
1700
+
1701
+ // Maybe parse a Perl character class escape sequence.
1702
+ // Only recognizes the Perl character classes (\d \s \w \D \S \W),
1703
+ // not the Perl empty-string classes (\b \B \A \Z \z).
1704
+ // On success, sets *s to span the remainder of the string
1705
+ // and returns the corresponding UGroup.
1706
+ // The StringPiece must *NOT* be edited unless the call succeeds.
1707
+ const UGroup* MaybeParsePerlCCEscape(StringPiece* s, Regexp::ParseFlags parse_flags) {
1708
+ if (!(parse_flags & Regexp::PerlClasses))
1709
+ return NULL;
1710
+ if (s->size() < 2 || (*s)[0] != '\\')
1711
+ return NULL;
1712
+ // Could use StringPieceToRune, but there aren't
1713
+ // any non-ASCII Perl group names.
1714
+ StringPiece name(s->data(), 2);
1715
+ const UGroup *g = LookupPerlGroup(name);
1716
+ if (g == NULL)
1717
+ return NULL;
1718
+ s->remove_prefix(name.size());
1719
+ return g;
1720
+ }
1721
+
1722
+ enum ParseStatus {
1723
+ kParseOk, // Did some parsing.
1724
+ kParseError, // Found an error.
1725
+ kParseNothing, // Decided not to parse.
1726
+ };
1727
+
1728
+ // Maybe parses a Unicode character group like \p{Han} or \P{Han}
1729
+ // (the latter is a negated group).
1730
+ ParseStatus ParseUnicodeGroup(StringPiece* s, Regexp::ParseFlags parse_flags,
1731
+ CharClassBuilder *cc,
1732
+ RegexpStatus* status) {
1733
+ // Decide whether to parse.
1734
+ if (!(parse_flags & Regexp::UnicodeGroups))
1735
+ return kParseNothing;
1736
+ if (s->size() < 2 || (*s)[0] != '\\')
1737
+ return kParseNothing;
1738
+ Rune c = (*s)[1];
1739
+ if (c != 'p' && c != 'P')
1740
+ return kParseNothing;
1741
+
1742
+ // Committed to parse. Results:
1743
+ int sign = +1; // -1 = negated char class
1744
+ if (c == 'P')
1745
+ sign = -sign;
1746
+ StringPiece seq = *s; // \p{Han} or \pL
1747
+ StringPiece name; // Han or L
1748
+ s->remove_prefix(2); // '\\', 'p'
1749
+
1750
+ if (!StringPieceToRune(&c, s, status))
1751
+ return kParseError;
1752
+ if (c != '{') {
1753
+ // Name is the bit of string we just skipped over for c.
1754
+ const char* p = seq.data() + 2;
1755
+ name = StringPiece(p, static_cast<size_t>(s->data() - p));
1756
+ } else {
1757
+ // Name is in braces. Look for closing }
1758
+ size_t end = s->find('}', 0);
1759
+ if (end == StringPiece::npos) {
1760
+ if (!IsValidUTF8(seq, status))
1761
+ return kParseError;
1762
+ status->set_code(kRegexpBadCharRange);
1763
+ status->set_error_arg(seq);
1764
+ return kParseError;
1765
+ }
1766
+ name = StringPiece(s->data(), end); // without '}'
1767
+ s->remove_prefix(end + 1); // with '}'
1768
+ if (!IsValidUTF8(name, status))
1769
+ return kParseError;
1770
+ }
1771
+
1772
+ // Chop seq where s now begins.
1773
+ seq = StringPiece(seq.data(), static_cast<size_t>(s->data() - seq.data()));
1774
+
1775
+ if (!name.empty() && name[0] == '^') {
1776
+ sign = -sign;
1777
+ name.remove_prefix(1); // '^'
1778
+ }
1779
+
1780
+ #if !defined(RE2_USE_ICU)
1781
+ // Look up the group in the RE2 Unicode data.
1782
+ const UGroup *g = LookupUnicodeGroup(name);
1783
+ if (g == NULL) {
1784
+ status->set_code(kRegexpBadCharRange);
1785
+ status->set_error_arg(seq);
1786
+ return kParseError;
1787
+ }
1788
+
1789
+ AddUGroup(cc, g, sign, parse_flags);
1790
+ #else
1791
+ // Look up the group in the ICU Unicode data. Because ICU provides full
1792
+ // Unicode properties support, this could be more than a lookup by name.
1793
+ ::icu::UnicodeString ustr = ::icu::UnicodeString::fromUTF8(
1794
+ std::string("\\p{") + std::string(name) + std::string("}"));
1795
+ UErrorCode uerr = U_ZERO_ERROR;
1796
+ ::icu::UnicodeSet uset(ustr, uerr);
1797
+ if (U_FAILURE(uerr)) {
1798
+ status->set_code(kRegexpBadCharRange);
1799
+ status->set_error_arg(seq);
1800
+ return kParseError;
1801
+ }
1802
+
1803
+ // Convert the UnicodeSet to a URange32 and UGroup that we can add.
1804
+ int nr = uset.getRangeCount();
1805
+ PODArray<URange32> r(nr);
1806
+ for (int i = 0; i < nr; i++) {
1807
+ r[i].lo = uset.getRangeStart(i);
1808
+ r[i].hi = uset.getRangeEnd(i);
1809
+ }
1810
+ UGroup g = {"", +1, 0, 0, r.data(), nr};
1811
+ AddUGroup(cc, &g, sign, parse_flags);
1812
+ #endif
1813
+
1814
+ return kParseOk;
1815
+ }
1816
+
1817
+ // Parses a character class name like [:alnum:].
1818
+ // Sets *s to span the remainder of the string.
1819
+ // Adds the ranges corresponding to the class to ranges.
1820
+ static ParseStatus ParseCCName(StringPiece* s, Regexp::ParseFlags parse_flags,
1821
+ CharClassBuilder *cc,
1822
+ RegexpStatus* status) {
1823
+ // Check begins with [:
1824
+ const char* p = s->data();
1825
+ const char* ep = s->data() + s->size();
1826
+ if (ep - p < 2 || p[0] != '[' || p[1] != ':')
1827
+ return kParseNothing;
1828
+
1829
+ // Look for closing :].
1830
+ const char* q;
1831
+ for (q = p+2; q <= ep-2 && (*q != ':' || *(q+1) != ']'); q++)
1832
+ ;
1833
+
1834
+ // If no closing :], then ignore.
1835
+ if (q > ep-2)
1836
+ return kParseNothing;
1837
+
1838
+ // Got it. Check that it's valid.
1839
+ q += 2;
1840
+ StringPiece name(p, static_cast<size_t>(q - p));
1841
+
1842
+ const UGroup *g = LookupPosixGroup(name);
1843
+ if (g == NULL) {
1844
+ status->set_code(kRegexpBadCharRange);
1845
+ status->set_error_arg(name);
1846
+ return kParseError;
1847
+ }
1848
+
1849
+ s->remove_prefix(name.size());
1850
+ AddUGroup(cc, g, g->sign, parse_flags);
1851
+ return kParseOk;
1852
+ }
1853
+
1854
+ // Parses a character inside a character class.
1855
+ // There are fewer special characters here than in the rest of the regexp.
1856
+ // Sets *s to span the remainder of the string.
1857
+ // Sets *rp to the character.
1858
+ bool Regexp::ParseState::ParseCCCharacter(StringPiece* s, Rune *rp,
1859
+ const StringPiece& whole_class,
1860
+ RegexpStatus* status) {
1861
+ if (s->empty()) {
1862
+ status->set_code(kRegexpMissingBracket);
1863
+ status->set_error_arg(whole_class);
1864
+ return false;
1865
+ }
1866
+
1867
+ // Allow regular escape sequences even though
1868
+ // many need not be escaped in this context.
1869
+ if ((*s)[0] == '\\')
1870
+ return ParseEscape(s, rp, status, rune_max_);
1871
+
1872
+ // Otherwise take the next rune.
1873
+ return StringPieceToRune(rp, s, status) >= 0;
1874
+ }
1875
+
1876
+ // Parses a character class character, or, if the character
1877
+ // is followed by a hyphen, parses a character class range.
1878
+ // For single characters, rr->lo == rr->hi.
1879
+ // Sets *s to span the remainder of the string.
1880
+ // Sets *rp to the character.
1881
+ bool Regexp::ParseState::ParseCCRange(StringPiece* s, RuneRange* rr,
1882
+ const StringPiece& whole_class,
1883
+ RegexpStatus* status) {
1884
+ StringPiece os = *s;
1885
+ if (!ParseCCCharacter(s, &rr->lo, whole_class, status))
1886
+ return false;
1887
+ // [a-] means (a|-), so check for final ].
1888
+ if (s->size() >= 2 && (*s)[0] == '-' && (*s)[1] != ']') {
1889
+ s->remove_prefix(1); // '-'
1890
+ if (!ParseCCCharacter(s, &rr->hi, whole_class, status))
1891
+ return false;
1892
+ if (rr->hi < rr->lo) {
1893
+ status->set_code(kRegexpBadCharRange);
1894
+ status->set_error_arg(
1895
+ StringPiece(os.data(), static_cast<size_t>(s->data() - os.data())));
1896
+ return false;
1897
+ }
1898
+ } else {
1899
+ rr->hi = rr->lo;
1900
+ }
1901
+ return true;
1902
+ }
1903
+
1904
+ // Parses a possibly-negated character class expression like [^abx-z[:digit:]].
1905
+ // Sets *s to span the remainder of the string.
1906
+ // Sets *out_re to the regexp for the class.
1907
+ bool Regexp::ParseState::ParseCharClass(StringPiece* s,
1908
+ Regexp** out_re,
1909
+ RegexpStatus* status) {
1910
+ StringPiece whole_class = *s;
1911
+ if (s->empty() || (*s)[0] != '[') {
1912
+ // Caller checked this.
1913
+ status->set_code(kRegexpInternalError);
1914
+ status->set_error_arg(StringPiece());
1915
+ return false;
1916
+ }
1917
+ bool negated = false;
1918
+ Regexp* re = new Regexp(kRegexpCharClass, flags_ & ~FoldCase);
1919
+ re->ccb_ = new CharClassBuilder;
1920
+ s->remove_prefix(1); // '['
1921
+ if (!s->empty() && (*s)[0] == '^') {
1922
+ s->remove_prefix(1); // '^'
1923
+ negated = true;
1924
+ if (!(flags_ & ClassNL) || (flags_ & NeverNL)) {
1925
+ // If NL can't match implicitly, then pretend
1926
+ // negated classes include a leading \n.
1927
+ re->ccb_->AddRange('\n', '\n');
1928
+ }
1929
+ }
1930
+ bool first = true; // ] is okay as first char in class
1931
+ while (!s->empty() && ((*s)[0] != ']' || first)) {
1932
+ // - is only okay unescaped as first or last in class.
1933
+ // Except that Perl allows - anywhere.
1934
+ if ((*s)[0] == '-' && !first && !(flags_&PerlX) &&
1935
+ (s->size() == 1 || (*s)[1] != ']')) {
1936
+ StringPiece t = *s;
1937
+ t.remove_prefix(1); // '-'
1938
+ Rune r;
1939
+ int n = StringPieceToRune(&r, &t, status);
1940
+ if (n < 0) {
1941
+ re->Decref();
1942
+ return false;
1943
+ }
1944
+ status->set_code(kRegexpBadCharRange);
1945
+ status->set_error_arg(StringPiece(s->data(), 1+n));
1946
+ re->Decref();
1947
+ return false;
1948
+ }
1949
+ first = false;
1950
+
1951
+ // Look for [:alnum:] etc.
1952
+ if (s->size() > 2 && (*s)[0] == '[' && (*s)[1] == ':') {
1953
+ switch (ParseCCName(s, flags_, re->ccb_, status)) {
1954
+ case kParseOk:
1955
+ continue;
1956
+ case kParseError:
1957
+ re->Decref();
1958
+ return false;
1959
+ case kParseNothing:
1960
+ break;
1961
+ }
1962
+ }
1963
+
1964
+ // Look for Unicode character group like \p{Han}
1965
+ if (s->size() > 2 &&
1966
+ (*s)[0] == '\\' &&
1967
+ ((*s)[1] == 'p' || (*s)[1] == 'P')) {
1968
+ switch (ParseUnicodeGroup(s, flags_, re->ccb_, status)) {
1969
+ case kParseOk:
1970
+ continue;
1971
+ case kParseError:
1972
+ re->Decref();
1973
+ return false;
1974
+ case kParseNothing:
1975
+ break;
1976
+ }
1977
+ }
1978
+
1979
+ // Look for Perl character class symbols (extension).
1980
+ const UGroup *g = MaybeParsePerlCCEscape(s, flags_);
1981
+ if (g != NULL) {
1982
+ AddUGroup(re->ccb_, g, g->sign, flags_);
1983
+ continue;
1984
+ }
1985
+
1986
+ // Otherwise assume single character or simple range.
1987
+ RuneRange rr;
1988
+ if (!ParseCCRange(s, &rr, whole_class, status)) {
1989
+ re->Decref();
1990
+ return false;
1991
+ }
1992
+ // AddRangeFlags is usually called in response to a class like
1993
+ // \p{Foo} or [[:foo:]]; for those, it filters \n out unless
1994
+ // Regexp::ClassNL is set. In an explicit range or singleton
1995
+ // like we just parsed, we do not filter \n out, so set ClassNL
1996
+ // in the flags.
1997
+ re->ccb_->AddRangeFlags(rr.lo, rr.hi, flags_ | Regexp::ClassNL);
1998
+ }
1999
+ if (s->empty()) {
2000
+ status->set_code(kRegexpMissingBracket);
2001
+ status->set_error_arg(whole_class);
2002
+ re->Decref();
2003
+ return false;
2004
+ }
2005
+ s->remove_prefix(1); // ']'
2006
+
2007
+ if (negated)
2008
+ re->ccb_->Negate();
2009
+
2010
+ *out_re = re;
2011
+ return true;
2012
+ }
2013
+
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
+ static bool IsValidCaptureName(const StringPiece& name) {
2019
+ if (name.empty())
2020
+ 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 == '_')
2027
+ continue;
2028
+ return false;
2029
+ }
2030
+ return true;
2031
+ }
2032
+
2033
+ // Parses a Perl flag setting or non-capturing group or both,
2034
+ // like (?i) or (?: or (?i:. Removes from s, updates parse state.
2035
+ // The caller must check that s begins with "(?".
2036
+ // Returns true on success. If the Perl flag is not
2037
+ // well-formed or not supported, sets status_ and returns false.
2038
+ bool Regexp::ParseState::ParsePerlFlags(StringPiece* s) {
2039
+ StringPiece t = *s;
2040
+
2041
+ // Caller is supposed to check this.
2042
+ if (!(flags_ & PerlX) || t.size() < 2 || t[0] != '(' || t[1] != '?') {
2043
+ LOG(DFATAL) << "Bad call to ParseState::ParsePerlFlags";
2044
+ status_->set_code(kRegexpInternalError);
2045
+ return false;
2046
+ }
2047
+
2048
+ t.remove_prefix(2); // "(?"
2049
+
2050
+ // Check for named captures, first introduced in Python's regexp library.
2051
+ // As usual, there are three slightly different syntaxes:
2052
+ //
2053
+ // (?P<name>expr) the original, introduced by Python
2054
+ // (?<name>expr) the .NET alteration, adopted by Perl 5.10
2055
+ // (?'name'expr) another .NET alteration, adopted by Perl 5.10
2056
+ //
2057
+ // Perl 5.10 gave in and implemented the Python version too,
2058
+ // but they claim that the last two are the preferred forms.
2059
+ // PCRE and languages based on it (specifically, PHP and Ruby)
2060
+ // support all three as well. EcmaScript 4 uses only the Python form.
2061
+ //
2062
+ // In both the open source world (via Code Search) and the
2063
+ // Google source tree, (?P<expr>name) is the dominant form,
2064
+ // so that's the one we implement. One is enough.
2065
+ if (t.size() > 2 && t[0] == 'P' && t[1] == '<') {
2066
+ // Pull out name.
2067
+ size_t end = t.find('>', 2);
2068
+ if (end == StringPiece::npos) {
2069
+ if (!IsValidUTF8(*s, status_))
2070
+ return false;
2071
+ status_->set_code(kRegexpBadNamedCapture);
2072
+ status_->set_error_arg(*s);
2073
+ return false;
2074
+ }
2075
+
2076
+ // t is "P<name>...", t[end] == '>'
2077
+ StringPiece capture(t.data()-2, end+3); // "(?P<name>"
2078
+ StringPiece name(t.data()+2, end-2); // "name"
2079
+ if (!IsValidUTF8(name, status_))
2080
+ return false;
2081
+ if (!IsValidCaptureName(name)) {
2082
+ status_->set_code(kRegexpBadNamedCapture);
2083
+ status_->set_error_arg(capture);
2084
+ return false;
2085
+ }
2086
+
2087
+ if (!DoLeftParen(name)) {
2088
+ // DoLeftParen's failure set status_.
2089
+ return false;
2090
+ }
2091
+
2092
+ s->remove_prefix(
2093
+ static_cast<size_t>(capture.data() + capture.size() - s->data()));
2094
+ return true;
2095
+ }
2096
+
2097
+ bool negated = false;
2098
+ bool sawflags = false;
2099
+ int nflags = flags_;
2100
+ Rune c;
2101
+ for (bool done = false; !done; ) {
2102
+ if (t.empty())
2103
+ goto BadPerlOp;
2104
+ if (StringPieceToRune(&c, &t, status_) < 0)
2105
+ return false;
2106
+ switch (c) {
2107
+ default:
2108
+ goto BadPerlOp;
2109
+
2110
+ // Parse flags.
2111
+ case 'i':
2112
+ sawflags = true;
2113
+ if (negated)
2114
+ nflags &= ~FoldCase;
2115
+ else
2116
+ nflags |= FoldCase;
2117
+ break;
2118
+
2119
+ case 'm': // opposite of our OneLine
2120
+ sawflags = true;
2121
+ if (negated)
2122
+ nflags |= OneLine;
2123
+ else
2124
+ nflags &= ~OneLine;
2125
+ break;
2126
+
2127
+ case 's':
2128
+ sawflags = true;
2129
+ if (negated)
2130
+ nflags &= ~DotNL;
2131
+ else
2132
+ nflags |= DotNL;
2133
+ break;
2134
+
2135
+ case 'U':
2136
+ sawflags = true;
2137
+ if (negated)
2138
+ nflags &= ~NonGreedy;
2139
+ else
2140
+ nflags |= NonGreedy;
2141
+ break;
2142
+
2143
+ // Negation
2144
+ case '-':
2145
+ if (negated)
2146
+ goto BadPerlOp;
2147
+ negated = true;
2148
+ sawflags = false;
2149
+ break;
2150
+
2151
+ // Open new group.
2152
+ case ':':
2153
+ if (!DoLeftParenNoCapture()) {
2154
+ // DoLeftParenNoCapture's failure set status_.
2155
+ return false;
2156
+ }
2157
+ done = true;
2158
+ break;
2159
+
2160
+ // Finish flags.
2161
+ case ')':
2162
+ done = true;
2163
+ break;
2164
+ }
2165
+ }
2166
+
2167
+ if (negated && !sawflags)
2168
+ goto BadPerlOp;
2169
+
2170
+ flags_ = static_cast<Regexp::ParseFlags>(nflags);
2171
+ *s = t;
2172
+ return true;
2173
+
2174
+ BadPerlOp:
2175
+ status_->set_code(kRegexpBadPerlOp);
2176
+ status_->set_error_arg(
2177
+ StringPiece(s->data(), static_cast<size_t>(t.data() - s->data())));
2178
+ return false;
2179
+ }
2180
+
2181
+ // Converts latin1 (assumed to be encoded as Latin1 bytes)
2182
+ // into UTF8 encoding in string.
2183
+ // Can't use EncodingUtils::EncodeLatin1AsUTF8 because it is
2184
+ // deprecated and because it rejects code points 0x80-0x9F.
2185
+ void ConvertLatin1ToUTF8(const StringPiece& latin1, std::string* utf) {
2186
+ char buf[UTFmax];
2187
+
2188
+ utf->clear();
2189
+ for (size_t i = 0; i < latin1.size(); i++) {
2190
+ Rune r = latin1[i] & 0xFF;
2191
+ int n = runetochar(buf, &r);
2192
+ utf->append(buf, n);
2193
+ }
2194
+ }
2195
+
2196
+ // Parses the regular expression given by s,
2197
+ // returning the corresponding Regexp tree.
2198
+ // The caller must Decref the return value when done with it.
2199
+ // Returns NULL on error.
2200
+ Regexp* Regexp::Parse(const StringPiece& s, ParseFlags global_flags,
2201
+ RegexpStatus* status) {
2202
+ // Make status non-NULL (easier on everyone else).
2203
+ RegexpStatus xstatus;
2204
+ if (status == NULL)
2205
+ status = &xstatus;
2206
+
2207
+ ParseState ps(global_flags, s, status);
2208
+ StringPiece t = s;
2209
+
2210
+ // Convert regexp to UTF-8 (easier on the rest of the parser).
2211
+ if (global_flags & Latin1) {
2212
+ std::string* tmp = new std::string;
2213
+ ConvertLatin1ToUTF8(t, tmp);
2214
+ status->set_tmp(tmp);
2215
+ t = *tmp;
2216
+ }
2217
+
2218
+ if (global_flags & Literal) {
2219
+ // Special parse loop for literal string.
2220
+ while (!t.empty()) {
2221
+ Rune r;
2222
+ if (StringPieceToRune(&r, &t, status) < 0)
2223
+ return NULL;
2224
+ if (!ps.PushLiteral(r))
2225
+ return NULL;
2226
+ }
2227
+ return ps.DoFinish();
2228
+ }
2229
+
2230
+ StringPiece lastunary = StringPiece();
2231
+ while (!t.empty()) {
2232
+ StringPiece isunary = StringPiece();
2233
+ switch (t[0]) {
2234
+ default: {
2235
+ Rune r;
2236
+ if (StringPieceToRune(&r, &t, status) < 0)
2237
+ return NULL;
2238
+ if (!ps.PushLiteral(r))
2239
+ return NULL;
2240
+ break;
2241
+ }
2242
+
2243
+ case '(':
2244
+ // "(?" introduces Perl escape.
2245
+ if ((ps.flags() & PerlX) && (t.size() >= 2 && t[1] == '?')) {
2246
+ // Flag changes and non-capturing groups.
2247
+ if (!ps.ParsePerlFlags(&t))
2248
+ return NULL;
2249
+ break;
2250
+ }
2251
+ if (ps.flags() & NeverCapture) {
2252
+ if (!ps.DoLeftParenNoCapture())
2253
+ return NULL;
2254
+ } else {
2255
+ if (!ps.DoLeftParen(StringPiece()))
2256
+ return NULL;
2257
+ }
2258
+ t.remove_prefix(1); // '('
2259
+ break;
2260
+
2261
+ case '|':
2262
+ if (!ps.DoVerticalBar())
2263
+ return NULL;
2264
+ t.remove_prefix(1); // '|'
2265
+ break;
2266
+
2267
+ case ')':
2268
+ if (!ps.DoRightParen())
2269
+ return NULL;
2270
+ t.remove_prefix(1); // ')'
2271
+ break;
2272
+
2273
+ case '^': // Beginning of line.
2274
+ if (!ps.PushCaret())
2275
+ return NULL;
2276
+ t.remove_prefix(1); // '^'
2277
+ break;
2278
+
2279
+ case '$': // End of line.
2280
+ if (!ps.PushDollar())
2281
+ return NULL;
2282
+ t.remove_prefix(1); // '$'
2283
+ break;
2284
+
2285
+ case '.': // Any character (possibly except newline).
2286
+ if (!ps.PushDot())
2287
+ return NULL;
2288
+ t.remove_prefix(1); // '.'
2289
+ break;
2290
+
2291
+ case '[': { // Character class.
2292
+ Regexp* re;
2293
+ if (!ps.ParseCharClass(&t, &re, status))
2294
+ return NULL;
2295
+ if (!ps.PushRegexp(re))
2296
+ return NULL;
2297
+ break;
2298
+ }
2299
+
2300
+ case '*': { // Zero or more.
2301
+ RegexpOp op;
2302
+ op = kRegexpStar;
2303
+ goto Rep;
2304
+ case '+': // One or more.
2305
+ op = kRegexpPlus;
2306
+ goto Rep;
2307
+ case '?': // Zero or one.
2308
+ op = kRegexpQuest;
2309
+ goto Rep;
2310
+ Rep:
2311
+ StringPiece opstr = t;
2312
+ bool nongreedy = false;
2313
+ t.remove_prefix(1); // '*' or '+' or '?'
2314
+ if (ps.flags() & PerlX) {
2315
+ if (!t.empty() && t[0] == '?') {
2316
+ nongreedy = true;
2317
+ t.remove_prefix(1); // '?'
2318
+ }
2319
+ if (!lastunary.empty()) {
2320
+ // In Perl it is not allowed to stack repetition operators:
2321
+ // a** is a syntax error, not a double-star.
2322
+ // (and a++ means something else entirely, which we don't support!)
2323
+ status->set_code(kRegexpRepeatOp);
2324
+ status->set_error_arg(StringPiece(
2325
+ lastunary.data(),
2326
+ static_cast<size_t>(t.data() - lastunary.data())));
2327
+ return NULL;
2328
+ }
2329
+ }
2330
+ opstr = StringPiece(opstr.data(),
2331
+ static_cast<size_t>(t.data() - opstr.data()));
2332
+ if (!ps.PushRepeatOp(op, opstr, nongreedy))
2333
+ return NULL;
2334
+ isunary = opstr;
2335
+ break;
2336
+ }
2337
+
2338
+ case '{': { // Counted repetition.
2339
+ int lo, hi;
2340
+ StringPiece opstr = t;
2341
+ if (!MaybeParseRepetition(&t, &lo, &hi)) {
2342
+ // Treat like a literal.
2343
+ if (!ps.PushLiteral('{'))
2344
+ return NULL;
2345
+ t.remove_prefix(1); // '{'
2346
+ break;
2347
+ }
2348
+ bool nongreedy = false;
2349
+ if (ps.flags() & PerlX) {
2350
+ if (!t.empty() && t[0] == '?') {
2351
+ nongreedy = true;
2352
+ t.remove_prefix(1); // '?'
2353
+ }
2354
+ if (!lastunary.empty()) {
2355
+ // Not allowed to stack repetition operators.
2356
+ status->set_code(kRegexpRepeatOp);
2357
+ status->set_error_arg(StringPiece(
2358
+ lastunary.data(),
2359
+ static_cast<size_t>(t.data() - lastunary.data())));
2360
+ return NULL;
2361
+ }
2362
+ }
2363
+ opstr = StringPiece(opstr.data(),
2364
+ static_cast<size_t>(t.data() - opstr.data()));
2365
+ if (!ps.PushRepetition(lo, hi, opstr, nongreedy))
2366
+ return NULL;
2367
+ isunary = opstr;
2368
+ break;
2369
+ }
2370
+
2371
+ case '\\': { // Escaped character or Perl sequence.
2372
+ // \b and \B: word boundary or not
2373
+ if ((ps.flags() & Regexp::PerlB) &&
2374
+ t.size() >= 2 && (t[1] == 'b' || t[1] == 'B')) {
2375
+ if (!ps.PushWordBoundary(t[1] == 'b'))
2376
+ return NULL;
2377
+ t.remove_prefix(2); // '\\', 'b'
2378
+ break;
2379
+ }
2380
+
2381
+ if ((ps.flags() & Regexp::PerlX) && t.size() >= 2) {
2382
+ if (t[1] == 'A') {
2383
+ if (!ps.PushSimpleOp(kRegexpBeginText))
2384
+ return NULL;
2385
+ t.remove_prefix(2); // '\\', 'A'
2386
+ break;
2387
+ }
2388
+ if (t[1] == 'z') {
2389
+ if (!ps.PushSimpleOp(kRegexpEndText))
2390
+ return NULL;
2391
+ t.remove_prefix(2); // '\\', 'z'
2392
+ break;
2393
+ }
2394
+ // Do not recognize \Z, because this library can't
2395
+ // implement the exact Perl/PCRE semantics.
2396
+ // (This library treats "(?-m)$" as \z, even though
2397
+ // in Perl and PCRE it is equivalent to \Z.)
2398
+
2399
+ if (t[1] == 'C') { // \C: any byte [sic]
2400
+ if (!ps.PushSimpleOp(kRegexpAnyByte))
2401
+ return NULL;
2402
+ t.remove_prefix(2); // '\\', 'C'
2403
+ break;
2404
+ }
2405
+
2406
+ if (t[1] == 'Q') { // \Q ... \E: the ... is always literals
2407
+ t.remove_prefix(2); // '\\', 'Q'
2408
+ while (!t.empty()) {
2409
+ if (t.size() >= 2 && t[0] == '\\' && t[1] == 'E') {
2410
+ t.remove_prefix(2); // '\\', 'E'
2411
+ break;
2412
+ }
2413
+ Rune r;
2414
+ if (StringPieceToRune(&r, &t, status) < 0)
2415
+ return NULL;
2416
+ if (!ps.PushLiteral(r))
2417
+ return NULL;
2418
+ }
2419
+ break;
2420
+ }
2421
+ }
2422
+
2423
+ if (t.size() >= 2 && (t[1] == 'p' || t[1] == 'P')) {
2424
+ Regexp* re = new Regexp(kRegexpCharClass, ps.flags() & ~FoldCase);
2425
+ re->ccb_ = new CharClassBuilder;
2426
+ switch (ParseUnicodeGroup(&t, ps.flags(), re->ccb_, status)) {
2427
+ case kParseOk:
2428
+ if (!ps.PushRegexp(re))
2429
+ return NULL;
2430
+ goto Break2;
2431
+ case kParseError:
2432
+ re->Decref();
2433
+ return NULL;
2434
+ case kParseNothing:
2435
+ re->Decref();
2436
+ break;
2437
+ }
2438
+ }
2439
+
2440
+ const UGroup *g = MaybeParsePerlCCEscape(&t, ps.flags());
2441
+ if (g != NULL) {
2442
+ Regexp* re = new Regexp(kRegexpCharClass, ps.flags() & ~FoldCase);
2443
+ re->ccb_ = new CharClassBuilder;
2444
+ AddUGroup(re->ccb_, g, g->sign, ps.flags());
2445
+ if (!ps.PushRegexp(re))
2446
+ return NULL;
2447
+ break;
2448
+ }
2449
+
2450
+ Rune r;
2451
+ if (!ParseEscape(&t, &r, status, ps.rune_max()))
2452
+ return NULL;
2453
+ if (!ps.PushLiteral(r))
2454
+ return NULL;
2455
+ break;
2456
+ }
2457
+ }
2458
+ Break2:
2459
+ lastunary = isunary;
2460
+ }
2461
+ return ps.DoFinish();
2462
+ }
2463
+
2464
+ } // namespace re2