grpc 1.41.0 → 1.42.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +77 -64
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -56,98 +56,68 @@
56
56
 
57
57
  #include <openssl/asn1.h>
58
58
 
59
- #include <stdlib.h> /* For bsearch */
59
+ #include <assert.h>
60
+ #include <stdlib.h>
60
61
  #include <string.h>
61
62
 
62
63
  #include <openssl/err.h>
63
64
  #include <openssl/mem.h>
64
65
  #include <openssl/obj.h>
65
- #include <openssl/stack.h>
66
66
 
67
- DEFINE_STACK_OF(ASN1_STRING_TABLE)
67
+ #include "../internal.h"
68
+ #include "../lhash/internal.h"
69
+ #include "internal.h"
68
70
 
69
- static STACK_OF(ASN1_STRING_TABLE) *stable = NULL;
70
- static void st_free(ASN1_STRING_TABLE *tbl);
71
71
 
72
- /*
73
- * This is the global mask for the mbstring functions: this is use to mask
74
- * out certain types (such as BMPString and UTF8String) because certain
75
- * software (e.g. Netscape) has problems with them.
76
- */
72
+ DEFINE_LHASH_OF(ASN1_STRING_TABLE)
77
73
 
78
- static unsigned long global_mask = B_ASN1_UTF8STRING;
74
+ static LHASH_OF(ASN1_STRING_TABLE) *string_tables = NULL;
75
+ static struct CRYPTO_STATIC_MUTEX string_tables_lock = CRYPTO_STATIC_MUTEX_INIT;
79
76
 
80
77
  void ASN1_STRING_set_default_mask(unsigned long mask)
81
78
  {
82
- global_mask = mask;
83
79
  }
84
80
 
85
81
  unsigned long ASN1_STRING_get_default_mask(void)
86
82
  {
87
- return global_mask;
83
+ return B_ASN1_UTF8STRING;
88
84
  }
89
85
 
90
- /*
91
- * This function sets the default to various "flavours" of configuration.
92
- * based on an ASCII string. Currently this is: MASK:XXXX : a numerical mask
93
- * value. nobmp : Don't use BMPStrings (just Printable, T61). pkix : PKIX
94
- * recommendation in RFC2459. utf8only : only use UTF8Strings (RFC2459
95
- * recommendation for 2004). default: the default value, Printable, T61, BMP.
96
- */
97
-
98
86
  int ASN1_STRING_set_default_mask_asc(const char *p)
99
87
  {
100
- unsigned long mask;
101
- char *end;
102
- if (!strncmp(p, "MASK:", 5)) {
103
- if (!p[5])
104
- return 0;
105
- mask = strtoul(p + 5, &end, 0);
106
- if (*end)
107
- return 0;
108
- } else if (!strcmp(p, "nombstr"))
109
- mask = ~((unsigned long)(B_ASN1_BMPSTRING | B_ASN1_UTF8STRING));
110
- else if (!strcmp(p, "pkix"))
111
- mask = ~((unsigned long)B_ASN1_T61STRING);
112
- else if (!strcmp(p, "utf8only"))
113
- mask = B_ASN1_UTF8STRING;
114
- else if (!strcmp(p, "default"))
115
- mask = 0xFFFFFFFFL;
116
- else
117
- return 0;
118
- ASN1_STRING_set_default_mask(mask);
119
88
  return 1;
120
89
  }
121
90
 
91
+ static const ASN1_STRING_TABLE *asn1_string_table_get(int nid);
92
+
122
93
  /*
123
94
  * The following function generates an ASN1_STRING based on limits in a
124
95
  * table. Frequently the types and length of an ASN1_STRING are restricted by
125
96
  * a corresponding OID. For example certificates and certificate requests.
126
97
  */
127
98
 
128
- ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
129
- const unsigned char *in, int inlen,
130
- int inform, int nid)
99
+ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out, const unsigned char *in,
100
+ int len, int inform, int nid)
131
101
  {
132
- ASN1_STRING_TABLE *tbl;
133
102
  ASN1_STRING *str = NULL;
134
- unsigned long mask;
135
103
  int ret;
136
- if (!out)
104
+ if (!out) {
137
105
  out = &str;
138
- tbl = ASN1_STRING_TABLE_get(nid);
139
- if (tbl) {
140
- mask = tbl->mask;
141
- if (!(tbl->flags & STABLE_NO_MASK))
142
- mask &= global_mask;
143
- ret = ASN1_mbstring_ncopy(out, in, inlen, inform, mask,
144
- tbl->minsize, tbl->maxsize);
145
- } else
146
- ret =
147
- ASN1_mbstring_copy(out, in, inlen, inform,
148
- DIRSTRING_TYPE & global_mask);
149
- if (ret <= 0)
106
+ }
107
+ const ASN1_STRING_TABLE *tbl = asn1_string_table_get(nid);
108
+ if (tbl != NULL) {
109
+ unsigned long mask = tbl->mask;
110
+ if (!(tbl->flags & STABLE_NO_MASK)) {
111
+ mask &= B_ASN1_UTF8STRING;
112
+ }
113
+ ret = ASN1_mbstring_ncopy(out, in, len, inform, mask, tbl->minsize,
114
+ tbl->maxsize);
115
+ } else {
116
+ ret = ASN1_mbstring_copy(out, in, len, inform, B_ASN1_UTF8STRING);
117
+ }
118
+ if (ret <= 0) {
150
119
  return NULL;
120
+ }
151
121
  return *out;
152
122
  }
153
123
 
@@ -155,15 +125,13 @@ ASN1_STRING *ASN1_STRING_set_by_NID(ASN1_STRING **out,
155
125
  * Now the tables and helper functions for the string table:
156
126
  */
157
127
 
158
- /* size limits: this stuff is taken straight from RFC3280 */
159
-
128
+ /* See RFC 5280. */
160
129
  #define ub_name 32768
161
130
  #define ub_common_name 64
162
131
  #define ub_locality_name 128
163
132
  #define ub_state_name 128
164
133
  #define ub_organization_name 64
165
134
  #define ub_organization_unit_name 64
166
- #define ub_title 64
167
135
  #define ub_email_address 128
168
136
  #define ub_serial_number 64
169
137
 
@@ -194,120 +162,105 @@ static const ASN1_STRING_TABLE tbl_standard[] = {
194
162
  {NID_ms_csp_name, -1, -1, B_ASN1_BMPSTRING, STABLE_NO_MASK}
195
163
  };
196
164
 
197
- static int sk_table_cmp(const ASN1_STRING_TABLE **a,
198
- const ASN1_STRING_TABLE **b)
165
+ static int table_cmp(const ASN1_STRING_TABLE *a, const ASN1_STRING_TABLE *b)
199
166
  {
200
- return (*a)->nid - (*b)->nid;
167
+ if (a->nid < b->nid) {
168
+ return -1;
169
+ }
170
+ if (a->nid > b->nid) {
171
+ return 1;
172
+ }
173
+ return 0;
201
174
  }
202
175
 
203
- static int table_cmp(const void *in_a, const void *in_b)
176
+ static int table_cmp_void(const void *a, const void *b)
204
177
  {
205
- const ASN1_STRING_TABLE *a = in_a;
206
- const ASN1_STRING_TABLE *b = in_b;
207
- return a->nid - b->nid;
178
+ return table_cmp(a, b);
208
179
  }
209
180
 
210
- ASN1_STRING_TABLE *ASN1_STRING_TABLE_get(int nid)
181
+ static uint32_t table_hash(const ASN1_STRING_TABLE *tbl)
211
182
  {
212
- int found;
213
- size_t idx;
214
- ASN1_STRING_TABLE *ttmp;
215
- ASN1_STRING_TABLE fnd;
216
- fnd.nid = nid;
217
-
218
- ttmp =
219
- bsearch(&fnd, tbl_standard,
220
- sizeof(tbl_standard) / sizeof(ASN1_STRING_TABLE),
221
- sizeof(ASN1_STRING_TABLE), table_cmp);
222
- if (ttmp)
223
- return ttmp;
224
- if (!stable)
225
- return NULL;
226
- sk_ASN1_STRING_TABLE_sort(stable);
227
- found = sk_ASN1_STRING_TABLE_find(stable, &idx, &fnd);
228
- if (!found)
229
- return NULL;
230
- return sk_ASN1_STRING_TABLE_value(stable, idx);
183
+ return OPENSSL_hash32(&tbl->nid, sizeof(tbl->nid));
231
184
  }
232
185
 
233
- int ASN1_STRING_TABLE_add(int nid,
234
- long minsize, long maxsize, unsigned long mask,
235
- unsigned long flags)
186
+ static const ASN1_STRING_TABLE *asn1_string_table_get(int nid)
236
187
  {
237
- ASN1_STRING_TABLE *tmp;
238
- char new_nid = 0;
239
- flags &= ~STABLE_FLAGS_MALLOC;
240
- if (!stable)
241
- stable = sk_ASN1_STRING_TABLE_new(sk_table_cmp);
242
- if (!stable) {
243
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
244
- return 0;
188
+ ASN1_STRING_TABLE key;
189
+ key.nid = nid;
190
+ const ASN1_STRING_TABLE *tbl =
191
+ bsearch(&key, tbl_standard, OPENSSL_ARRAY_SIZE(tbl_standard),
192
+ sizeof(ASN1_STRING_TABLE), table_cmp_void);
193
+ if (tbl != NULL) {
194
+ return tbl;
245
195
  }
246
- if (!(tmp = ASN1_STRING_TABLE_get(nid))) {
247
- tmp = OPENSSL_malloc(sizeof(ASN1_STRING_TABLE));
248
- if (!tmp) {
249
- OPENSSL_PUT_ERROR(ASN1, ERR_R_MALLOC_FAILURE);
250
- return 0;
251
- }
252
- tmp->flags = flags | STABLE_FLAGS_MALLOC;
253
- tmp->nid = nid;
254
- tmp->minsize = tmp->maxsize = -1;
255
- new_nid = 1;
256
- } else
257
- tmp->flags = (tmp->flags & STABLE_FLAGS_MALLOC) | flags;
258
- if (minsize != -1)
259
- tmp->minsize = minsize;
260
- if (maxsize != -1)
261
- tmp->maxsize = maxsize;
262
- tmp->mask = mask;
263
- if (new_nid)
264
- sk_ASN1_STRING_TABLE_push(stable, tmp);
265
- return 1;
266
- }
267
196
 
268
- void ASN1_STRING_TABLE_cleanup(void)
269
- {
270
- STACK_OF(ASN1_STRING_TABLE) *tmp;
271
- tmp = stable;
272
- if (!tmp)
273
- return;
274
- stable = NULL;
275
- sk_ASN1_STRING_TABLE_pop_free(tmp, st_free);
197
+ CRYPTO_STATIC_MUTEX_lock_read(&string_tables_lock);
198
+ if (string_tables != NULL) {
199
+ tbl = lh_ASN1_STRING_TABLE_retrieve(string_tables, &key);
200
+ }
201
+ CRYPTO_STATIC_MUTEX_unlock_read(&string_tables_lock);
202
+ /* Note returning |tbl| without the lock is only safe because
203
+ * |ASN1_STRING_TABLE_add| cannot modify or delete existing entries. If we
204
+ * wish to support that, this function must copy the result under a lock. */
205
+ return tbl;
276
206
  }
277
207
 
278
- static void st_free(ASN1_STRING_TABLE *tbl)
208
+ int ASN1_STRING_TABLE_add(int nid, long minsize, long maxsize,
209
+ unsigned long mask, unsigned long flags)
279
210
  {
280
- if (tbl->flags & STABLE_FLAGS_MALLOC)
281
- OPENSSL_free(tbl);
282
- }
211
+ /* Existing entries cannot be overwritten. */
212
+ if (asn1_string_table_get(nid) != NULL) {
213
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
214
+ return 0;
215
+ }
283
216
 
284
- #ifdef STRING_TABLE_TEST
217
+ int ret = 0;
218
+ CRYPTO_STATIC_MUTEX_lock_write(&string_tables_lock);
285
219
 
286
- int main(void)
287
- {
288
- ASN1_STRING_TABLE *tmp;
289
- int i, last_nid = -1;
290
-
291
- for (tmp = tbl_standard, i = 0;
292
- i < sizeof(tbl_standard) / sizeof(ASN1_STRING_TABLE); i++, tmp++) {
293
- if (tmp->nid < last_nid) {
294
- last_nid = 0;
295
- break;
220
+ if (string_tables == NULL) {
221
+ string_tables = lh_ASN1_STRING_TABLE_new(table_hash, table_cmp);
222
+ if (string_tables == NULL) {
223
+ goto err;
224
+ }
225
+ } else {
226
+ /* Check again for an existing entry. One may have been added while
227
+ * unlocked. */
228
+ ASN1_STRING_TABLE key;
229
+ key.nid = nid;
230
+ if (lh_ASN1_STRING_TABLE_retrieve(string_tables, &key) != NULL) {
231
+ OPENSSL_PUT_ERROR(ASN1, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
232
+ goto err;
296
233
  }
297
- last_nid = tmp->nid;
298
234
  }
299
235
 
300
- if (last_nid != 0) {
301
- printf("Table order OK\n");
302
- exit(0);
236
+ ASN1_STRING_TABLE *tbl = OPENSSL_malloc(sizeof(ASN1_STRING_TABLE));
237
+ if (tbl == NULL) {
238
+ goto err;
303
239
  }
240
+ tbl->nid = nid;
241
+ tbl->flags = flags;
242
+ tbl->minsize = minsize;
243
+ tbl->maxsize = maxsize;
244
+ tbl->mask = mask;
245
+ ASN1_STRING_TABLE *old_tbl;
246
+ if (!lh_ASN1_STRING_TABLE_insert(string_tables, &old_tbl, tbl)) {
247
+ OPENSSL_free(tbl);
248
+ goto err;
249
+ }
250
+ assert(old_tbl == NULL);
251
+ ret = 1;
304
252
 
305
- for (tmp = tbl_standard, i = 0;
306
- i < sizeof(tbl_standard) / sizeof(ASN1_STRING_TABLE); i++, tmp++)
307
- printf("Index %d, NID %d, Name=%s\n", i, tmp->nid,
308
- OBJ_nid2ln(tmp->nid));
253
+ err:
254
+ CRYPTO_STATIC_MUTEX_unlock_write(&string_tables_lock);
255
+ return ret;
256
+ }
309
257
 
310
- return 0;
258
+ void ASN1_STRING_TABLE_cleanup(void)
259
+ {
311
260
  }
312
261
 
313
- #endif
262
+ void asn1_get_string_table_for_testing(const ASN1_STRING_TABLE **out_ptr,
263
+ size_t *out_len) {
264
+ *out_ptr = tbl_standard;
265
+ *out_len = OPENSSL_ARRAY_SIZE(tbl_standard);
266
+ }
@@ -200,7 +200,7 @@ static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t)
200
200
  return 0;
201
201
  }
202
202
 
203
- int ASN1_TIME_diff(int *pday, int *psec,
203
+ int ASN1_TIME_diff(int *out_days, int *out_seconds,
204
204
  const ASN1_TIME *from, const ASN1_TIME *to)
205
205
  {
206
206
  struct tm tm_from, tm_to;
@@ -208,5 +208,5 @@ int ASN1_TIME_diff(int *pday, int *psec,
208
208
  return 0;
209
209
  if (!asn1_time_to_tm(&tm_to, to))
210
210
  return 0;
211
- return OPENSSL_gmtime_diff(pday, psec, &tm_from, &tm_to);
211
+ return OPENSSL_gmtime_diff(out_days, out_seconds, &tm_from, &tm_to);
212
212
  }
@@ -262,42 +262,3 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t)
262
262
  return -1;
263
263
  return 0;
264
264
  }
265
-
266
- #if 0
267
- time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s)
268
- {
269
- struct tm tm;
270
- int offset;
271
-
272
- OPENSSL_memset(&tm, '\0', sizeof tm);
273
-
274
- # define g2(p) (((p)[0]-'0')*10+(p)[1]-'0')
275
- tm.tm_year = g2(s->data);
276
- if (tm.tm_year < 50)
277
- tm.tm_year += 100;
278
- tm.tm_mon = g2(s->data + 2) - 1;
279
- tm.tm_mday = g2(s->data + 4);
280
- tm.tm_hour = g2(s->data + 6);
281
- tm.tm_min = g2(s->data + 8);
282
- tm.tm_sec = g2(s->data + 10);
283
- if (s->data[12] == 'Z')
284
- offset = 0;
285
- else {
286
- offset = g2(s->data + 13) * 60 + g2(s->data + 15);
287
- if (s->data[12] == '-')
288
- offset = -offset;
289
- }
290
- # undef g2
291
-
292
- return mktime(&tm) - offset * 60; /* FIXME: mktime assumes the current
293
- * timezone instead of UTC, and unless
294
- * we rewrite OpenSSL in Lisp we cannot
295
- * locally change the timezone without
296
- * possibly interfering with other
297
- * parts of the program. timegm, which
298
- * uses UTC, is non-standard. Also
299
- * time_t is inappropriate for general
300
- * UTC times because it may a 32 bit
301
- * type. */
302
- }
303
- #endif
@@ -72,7 +72,7 @@ const char *ASN1_tag2str(int tag)
72
72
  };
73
73
 
74
74
  if ((tag == V_ASN1_NEG_INTEGER) || (tag == V_ASN1_NEG_ENUMERATED))
75
- tag &= ~0x100;
75
+ tag &= ~V_ASN1_NEG;
76
76
 
77
77
  if (tag < 0 || tag > 30)
78
78
  return "(unknown)";
@@ -123,15 +123,31 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len,
123
123
  const ASN1_ITEM *it, int tag, int aclass, char opt,
124
124
  ASN1_TLC *ctx);
125
125
 
126
+ /* ASN1_item_ex_i2d encodes |*pval| as a value of type |it| to |out| under the
127
+ * i2d output convention. It returns a non-zero length on success and -1 on
128
+ * error. If |tag| is -1. the tag and class come from |it|. Otherwise, the tag
129
+ * number is |tag| and the class is |aclass|. This is used for implicit tagging.
130
+ * This function treats a missing value as an error, not an optional field. */
126
131
  int ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out,
127
132
  const ASN1_ITEM *it, int tag, int aclass);
133
+
128
134
  void ASN1_primitive_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
129
135
 
136
+ /* asn1_get_choice_selector returns the CHOICE selector value for |*pval|, which
137
+ * must of type |it|. */
130
138
  int asn1_get_choice_selector(ASN1_VALUE **pval, const ASN1_ITEM *it);
139
+
131
140
  int asn1_set_choice_selector(ASN1_VALUE **pval, int value, const ASN1_ITEM *it);
132
141
 
142
+ /* asn1_get_field_ptr returns a pointer to the field in |*pval| corresponding to
143
+ * |tt|. */
133
144
  ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt);
134
145
 
146
+ /* asn1_do_adb returns the |ASN1_TEMPLATE| for the ANY DEFINED BY field |tt|,
147
+ * based on the selector INTEGER or OID in |*pval|. If |tt| is not an ADB field,
148
+ * it returns |tt|. If the selector does not match any value, it returns NULL.
149
+ * If |nullerr| is non-zero, it will additionally push an error to the error
150
+ * queue when there is no match. */
135
151
  const ASN1_TEMPLATE *asn1_do_adb(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt,
136
152
  int nullerr);
137
153
 
@@ -140,8 +156,13 @@ int asn1_refcount_dec_and_test_zero(ASN1_VALUE **pval, const ASN1_ITEM *it);
140
156
 
141
157
  void asn1_enc_init(ASN1_VALUE **pval, const ASN1_ITEM *it);
142
158
  void asn1_enc_free(ASN1_VALUE **pval, const ASN1_ITEM *it);
159
+
160
+ /* asn1_enc_restore, if |*pval| has a saved encoding, writes it to |out| under
161
+ * the i2d output convention, sets |*len| to the length, and returns one. If it
162
+ * has no saved encoding, it returns zero. */
143
163
  int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval,
144
164
  const ASN1_ITEM *it);
165
+
145
166
  int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,
146
167
  const ASN1_ITEM *it);
147
168
 
@@ -150,6 +171,23 @@ int asn1_enc_save(ASN1_VALUE **pval, const unsigned char *in, int inlen,
150
171
  * a pointer. */
151
172
  const void *asn1_type_value_as_pointer(const ASN1_TYPE *a);
152
173
 
174
+ /* asn1_is_printable returns one if |value| is a valid Unicode codepoint for an
175
+ * ASN.1 PrintableString, and zero otherwise. */
176
+ int asn1_is_printable(uint32_t value);
177
+
178
+ typedef struct {
179
+ int nid;
180
+ long minsize;
181
+ long maxsize;
182
+ unsigned long mask;
183
+ unsigned long flags;
184
+ } ASN1_STRING_TABLE;
185
+
186
+ /* asn1_get_string_table_for_testing sets |*out_ptr| and |*out_len| to the table
187
+ * of built-in |ASN1_STRING_TABLE| values. It is exported for testing. */
188
+ OPENSSL_EXPORT void asn1_get_string_table_for_testing(
189
+ const ASN1_STRING_TABLE **out_ptr, size_t *out_len);
190
+
153
191
 
154
192
  #if defined(__cplusplus)
155
193
  } /* extern C */
@@ -170,8 +170,6 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
170
170
  {
171
171
  const ASN1_TEMPLATE *tt, *errtt = NULL;
172
172
  const ASN1_EXTERN_FUNCS *ef;
173
- const ASN1_AUX *aux = it->funcs;
174
- ASN1_aux_cb *asn1_cb;
175
173
  const unsigned char *p = NULL, *q;
176
174
  unsigned char oclass;
177
175
  char seq_eoc, seq_nolen, cst, isopt;
@@ -183,10 +181,6 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
183
181
  aclass &= ~ASN1_TFLG_COMBINE;
184
182
  if (!pval)
185
183
  return 0;
186
- if (aux && aux->asn1_cb)
187
- asn1_cb = aux->asn1_cb;
188
- else
189
- asn1_cb = 0;
190
184
 
191
185
  /*
192
186
  * Bound |len| to comfortably fit in an int. Lengths in this module often
@@ -264,7 +258,7 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
264
258
  ef = it->funcs;
265
259
  return ef->asn1_ex_d2i(pval, in, len, it, tag, aclass, opt, ctx);
266
260
 
267
- case ASN1_ITYPE_CHOICE:
261
+ case ASN1_ITYPE_CHOICE: {
268
262
  /*
269
263
  * It never makes sense for CHOICE types to have implicit tagging, so if
270
264
  * tag != -1, then this looks like an error in the template.
@@ -274,6 +268,8 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
274
268
  goto err;
275
269
  }
276
270
 
271
+ const ASN1_AUX *aux = it->funcs;
272
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
277
273
  if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
278
274
  goto auxerr;
279
275
 
@@ -327,8 +323,9 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
327
323
  goto auxerr;
328
324
  *in = p;
329
325
  return 1;
326
+ }
330
327
 
331
- case ASN1_ITYPE_SEQUENCE:
328
+ case ASN1_ITYPE_SEQUENCE: {
332
329
  p = *in;
333
330
 
334
331
  /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */
@@ -356,6 +353,8 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
356
353
  goto err;
357
354
  }
358
355
 
356
+ const ASN1_AUX *aux = it->funcs;
357
+ ASN1_aux_cb *asn1_cb = aux != NULL ? aux->asn1_cb : NULL;
359
358
  if (asn1_cb && !asn1_cb(ASN1_OP_D2I_PRE, pval, it, NULL))
360
359
  goto auxerr;
361
360
 
@@ -462,6 +461,7 @@ static int asn1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in,
462
461
  goto auxerr;
463
462
  *in = p;
464
463
  return 1;
464
+ }
465
465
 
466
466
  default:
467
467
  return 0;