grpc 1.30.1 → 1.32.0.pre1

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 (676) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +723 -15910
  3. data/include/grpc/grpc_security.h +31 -14
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/README.md +22 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  7. data/include/grpc/impl/codegen/port_platform.h +6 -33
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  9. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -2
  10. data/src/core/ext/filters/client_channel/client_channel.cc +470 -285
  11. data/src/core/ext/filters/client_channel/client_channel.h +1 -1
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.h +0 -3
  13. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  14. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  15. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  16. data/src/core/ext/filters/client_channel/health/health_check_client.cc +8 -1
  17. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -8
  18. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  19. data/src/core/ext/filters/client_channel/lb_policy.h +4 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -4
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -36
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -13
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +0 -3
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -37
  25. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -13
  26. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +29 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +5 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +23 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +18 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +22 -14
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +18 -9
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +385 -78
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -51
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  44. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
  45. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  46. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +383 -31
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  48. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -1
  50. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +38 -32
  51. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  52. data/src/core/ext/filters/client_channel/server_address.cc +40 -7
  53. data/src/core/ext/filters/client_channel/server_address.h +42 -4
  54. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  55. data/src/core/ext/filters/client_channel/subchannel.cc +65 -24
  56. data/src/core/ext/filters/client_channel/subchannel.h +16 -4
  57. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  59. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  60. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  61. data/src/core/ext/filters/max_age/max_age_filter.cc +2 -1
  62. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  63. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  64. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +87 -31
  65. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +18 -1
  66. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +10 -35
  67. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +378 -348
  68. data/src/core/ext/transport/chttp2/server/chttp2_server.h +7 -2
  69. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +10 -16
  71. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +9 -9
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +256 -279
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +23 -28
  74. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  75. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  76. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  77. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  78. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  79. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -9
  80. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  81. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  82. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  83. data/src/core/ext/transport/chttp2/transport/internal.h +18 -1
  84. data/src/core/ext/transport/chttp2/transport/parsing.cc +34 -71
  85. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -19
  86. data/src/core/ext/transport/inproc/inproc_transport.cc +47 -27
  87. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  88. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  89. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +224 -0
  90. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +700 -0
  91. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +74 -0
  92. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +226 -0
  93. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +380 -0
  94. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1378 -0
  95. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/filter.upb.c +8 -8
  96. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +69 -0
  97. data/src/core/ext/upb-generated/envoy/{api/v2/cluster → config/cluster/v3}/outlier_detection.upb.c +8 -8
  98. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +323 -0
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +112 -0
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +334 -0
  101. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/backoff.upb.c +8 -8
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +79 -0
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +309 -0
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +869 -0
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +96 -0
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +328 -0
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +34 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +71 -0
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +195 -0
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +634 -0
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +170 -0
  112. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +684 -0
  113. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/http_uri.upb.c +8 -8
  114. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +80 -0
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +152 -0
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +536 -0
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +28 -0
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +58 -0
  119. data/src/core/ext/upb-generated/envoy/{api/v2/core → config/core/v3}/socket_option.upb.c +6 -6
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +88 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +91 -0
  122. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +220 -0
  123. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -0
  124. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +273 -0
  125. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +112 -0
  126. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +332 -0
  127. data/src/core/ext/upb-generated/envoy/config/listener/{v2 → v3}/api_listener.upb.c +8 -8
  128. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +65 -0
  129. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +108 -0
  130. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +401 -0
  131. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +138 -0
  132. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +490 -0
  133. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +41 -0
  134. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +94 -0
  135. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +174 -0
  136. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +599 -0
  137. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -0
  138. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +204 -0
  139. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +773 -0
  140. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2855 -0
  141. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +59 -0
  142. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +135 -0
  143. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +50 -0
  144. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +108 -0
  145. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +312 -0
  146. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1125 -0
  147. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +20 -0
  148. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +34 -0
  149. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +111 -0
  150. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +401 -0
  151. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +72 -0
  152. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +198 -0
  153. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +105 -0
  154. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +388 -0
  155. data/src/core/ext/upb-generated/envoy/{api/v2 → service/cluster/v3}/cds.upb.c +5 -6
  156. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +49 -0
  157. data/src/core/ext/upb-generated/envoy/service/discovery/{v2 → v3}/ads.upb.c +5 -4
  158. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +49 -0
  159. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +129 -0
  160. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +386 -0
  161. data/src/core/ext/upb-generated/envoy/{api/v2 → service/endpoint/v3}/eds.upb.c +5 -6
  162. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +49 -0
  163. data/src/core/ext/upb-generated/envoy/{api/v2 → service/listener/v3}/lds.upb.c +5 -6
  164. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +49 -0
  165. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +55 -0
  166. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +136 -0
  167. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/rds.upb.c +5 -6
  168. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +49 -0
  169. data/src/core/ext/upb-generated/envoy/{api/v2 → service/route/v3}/srds.upb.c +5 -6
  170. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +49 -0
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +47 -0
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +114 -0
  173. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +35 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +77 -0
  175. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +34 -0
  176. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +71 -0
  177. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +64 -0
  178. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +145 -0
  179. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +53 -0
  180. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +127 -0
  181. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +63 -0
  182. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +188 -0
  183. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +88 -0
  184. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -0
  185. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +90 -0
  186. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +250 -0
  187. data/src/core/ext/upb-generated/envoy/type/{http.upb.c → v3/http.upb.c} +2 -2
  188. data/src/core/ext/upb-generated/envoy/type/{http.upb.h → v3/http.upb.h} +8 -9
  189. data/src/core/ext/upb-generated/envoy/type/{percent.upb.c → v3/percent.upb.c} +9 -8
  190. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +86 -0
  191. data/src/core/ext/upb-generated/envoy/type/{range.upb.c → v3/range.upb.c} +12 -11
  192. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -0
  193. data/src/core/ext/upb-generated/envoy/type/{semantic_version.upb.c → v3/semantic_version.upb.c} +6 -5
  194. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +61 -0
  195. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  196. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  197. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +234 -0
  198. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +759 -0
  199. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  200. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  201. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +39 -39
  202. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  203. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  204. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  205. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +34 -55
  207. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  208. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  209. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  213. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  214. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  215. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  218. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  219. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  220. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +27 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +53 -0
  222. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  223. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  224. data/src/core/ext/upb-generated/validate/validate.upb.c +11 -11
  225. data/src/core/ext/upb-generated/validate/validate.upb.h +537 -536
  226. data/src/core/ext/xds/xds_api.cc +2388 -0
  227. data/src/core/ext/{filters/client_channel/xds → xds}/xds_api.h +120 -40
  228. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.cc +56 -25
  229. data/src/core/ext/{filters/client_channel/xds → xds}/xds_bootstrap.h +8 -3
  230. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel.h +4 -4
  231. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_args.h +3 -3
  232. data/src/core/ext/{filters/client_channel/xds → xds}/xds_channel_secure.cc +2 -5
  233. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.cc +94 -347
  234. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client.h +12 -45
  235. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.cc +2 -2
  236. data/src/core/ext/{filters/client_channel/xds → xds}/xds_client_stats.h +13 -13
  237. data/src/core/lib/channel/channel_trace.cc +2 -6
  238. data/src/core/lib/channel/channelz.cc +19 -30
  239. data/src/core/lib/channel/channelz.h +1 -1
  240. data/src/core/lib/channel/channelz_registry.cc +3 -1
  241. data/src/core/lib/gpr/log_linux.cc +6 -8
  242. data/src/core/lib/gpr/log_posix.cc +6 -8
  243. data/src/core/lib/gpr/string.cc +10 -9
  244. data/src/core/lib/gpr/string.h +4 -2
  245. data/src/core/lib/gpr/sync_posix.cc +2 -8
  246. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  247. data/src/core/lib/http/httpcli.cc +13 -10
  248. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  249. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  250. data/src/core/lib/iomgr/endpoint.cc +5 -1
  251. data/src/core/lib/iomgr/endpoint.h +7 -3
  252. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -11
  253. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  254. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  255. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  256. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  257. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  258. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  259. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.cc +1 -1
  260. data/src/core/{ext/filters/client_channel → lib/iomgr}/parse_address.h +3 -3
  261. data/src/core/lib/iomgr/port.h +1 -21
  262. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  263. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  264. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  265. data/src/core/lib/iomgr/sockaddr_utils.cc +9 -6
  266. data/src/core/lib/iomgr/sockaddr_utils.h +3 -2
  267. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  268. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  269. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  270. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  271. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  272. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  273. data/src/core/lib/iomgr/tcp_custom.cc +33 -17
  274. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  275. data/src/core/lib/iomgr/tcp_posix.cc +31 -13
  276. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  277. data/src/core/lib/iomgr/tcp_server.h +7 -5
  278. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  279. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  280. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  284. data/src/core/lib/iomgr/tcp_windows.cc +26 -10
  285. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  286. data/src/core/lib/iomgr/udp_server.cc +24 -23
  287. data/src/core/lib/iomgr/udp_server.h +5 -2
  288. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  289. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  290. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  291. data/src/core/lib/json/json_reader.cc +20 -21
  292. data/src/core/lib/security/authorization/authorization_engine.cc +177 -0
  293. data/src/core/lib/security/authorization/authorization_engine.h +84 -0
  294. data/src/core/lib/security/authorization/evaluate_args.cc +153 -0
  295. data/src/core/lib/security/authorization/evaluate_args.h +59 -0
  296. data/src/core/lib/security/authorization/mock_cel/activation.h +57 -0
  297. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +42 -0
  298. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +68 -0
  299. data/src/core/lib/security/authorization/mock_cel/cel_value.h +93 -0
  300. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +67 -0
  301. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +56 -0
  302. data/src/core/lib/security/authorization/mock_cel/statusor.h +50 -0
  303. data/src/core/lib/security/credentials/credentials.h +5 -3
  304. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  305. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +64 -43
  306. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  307. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  308. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  309. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  310. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  311. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  312. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +11 -12
  313. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  314. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  315. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  316. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  317. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  318. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  319. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  320. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  321. data/src/core/lib/security/transport/secure_endpoint.cc +7 -1
  322. data/src/core/lib/security/util/json_util.cc +12 -13
  323. data/src/core/lib/slice/slice.cc +38 -1
  324. data/src/core/lib/slice/slice_internal.h +1 -0
  325. data/src/core/lib/surface/call.cc +52 -53
  326. data/src/core/lib/surface/call.h +2 -1
  327. data/src/core/lib/surface/channel.cc +28 -20
  328. data/src/core/lib/surface/channel.h +12 -2
  329. data/src/core/lib/surface/completion_queue.cc +0 -5
  330. data/src/core/lib/surface/init.cc +1 -1
  331. data/src/core/lib/surface/server.cc +1102 -1347
  332. data/src/core/lib/surface/server.h +369 -71
  333. data/src/core/lib/surface/version.cc +2 -2
  334. data/src/core/lib/transport/authority_override.cc +38 -0
  335. data/src/core/lib/transport/authority_override.h +32 -0
  336. data/src/core/lib/transport/connectivity_state.cc +18 -13
  337. data/src/core/lib/transport/connectivity_state.h +18 -6
  338. data/src/core/lib/transport/error_utils.cc +13 -0
  339. data/src/core/lib/transport/error_utils.h +6 -0
  340. data/src/core/lib/transport/static_metadata.cc +295 -276
  341. data/src/core/lib/transport/static_metadata.h +80 -73
  342. data/src/core/lib/transport/transport.h +13 -0
  343. data/src/core/lib/uri/uri_parser.cc +30 -35
  344. data/src/core/lib/uri/uri_parser.h +3 -1
  345. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  346. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  347. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +24 -0
  348. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  349. data/src/core/tsi/ssl_transport_security.cc +102 -11
  350. data/src/core/tsi/ssl_transport_security.h +14 -2
  351. data/src/core/tsi/transport_security_interface.h +5 -0
  352. data/src/ruby/bin/math_services_pb.rb +4 -4
  353. data/src/ruby/ext/grpc/extconf.rb +5 -2
  354. data/src/ruby/ext/grpc/rb_call.c +3 -2
  355. data/src/ruby/ext/grpc/rb_call.h +4 -0
  356. data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
  357. data/src/ruby/ext/grpc/rb_channel_credentials.c +9 -0
  358. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -2
  359. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +4 -4
  360. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  361. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  362. data/src/ruby/lib/grpc/version.rb +1 -1
  363. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  364. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  365. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  366. data/src/ruby/spec/channel_credentials_spec.rb +10 -0
  367. data/src/ruby/spec/generic/active_call_spec.rb +19 -8
  368. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  369. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  370. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  371. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  372. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  373. data/src/ruby/spec/user_agent_spec.rb +74 -0
  374. data/third_party/abseil-cpp/absl/algorithm/container.h +1727 -0
  375. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +161 -0
  376. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +93 -0
  377. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +130 -0
  378. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +620 -0
  379. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +126 -0
  380. data/third_party/abseil-cpp/absl/container/fixed_array.h +515 -0
  381. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +503 -0
  382. data/third_party/abseil-cpp/absl/container/internal/common.h +202 -0
  383. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +440 -0
  384. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +146 -0
  385. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +191 -0
  386. data/third_party/abseil-cpp/absl/container/internal/hashtable_debug_hooks.h +85 -0
  387. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +269 -0
  388. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +297 -0
  389. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +30 -0
  390. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +49 -0
  391. data/third_party/abseil-cpp/absl/container/internal/layout.h +741 -0
  392. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +48 -0
  393. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1882 -0
  394. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +138 -0
  395. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.h +32 -0
  396. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +1895 -0
  397. data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +71 -0
  398. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +382 -0
  399. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +134 -0
  400. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +192 -0
  401. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +125 -0
  402. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +70 -0
  403. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +99 -0
  404. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +248 -0
  405. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +24 -0
  406. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +85 -0
  407. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +346 -0
  408. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +128 -0
  409. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +194 -0
  410. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.h +158 -0
  411. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +140 -0
  412. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +231 -0
  413. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +25 -0
  414. data/third_party/abseil-cpp/absl/debugging/symbolize.h +99 -0
  415. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +1480 -0
  416. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +40 -0
  417. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +81 -0
  418. data/third_party/abseil-cpp/absl/functional/function_ref.h +139 -0
  419. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +106 -0
  420. data/third_party/abseil-cpp/absl/hash/hash.h +324 -0
  421. data/third_party/abseil-cpp/absl/hash/internal/city.cc +346 -0
  422. data/third_party/abseil-cpp/absl/hash/internal/city.h +96 -0
  423. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +55 -0
  424. data/third_party/abseil-cpp/absl/hash/internal/hash.h +988 -0
  425. data/third_party/abseil-cpp/absl/status/status.cc +447 -0
  426. data/third_party/abseil-cpp/absl/status/status.h +428 -0
  427. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +43 -0
  428. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +51 -0
  429. data/third_party/abseil-cpp/absl/strings/cord.cc +2019 -0
  430. data/third_party/abseil-cpp/absl/strings/cord.h +1121 -0
  431. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +151 -0
  432. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +52 -0
  433. data/third_party/abseil-cpp/absl/synchronization/barrier.h +79 -0
  434. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +57 -0
  435. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +99 -0
  436. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +140 -0
  437. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +60 -0
  438. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +697 -0
  439. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.h +141 -0
  440. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +155 -0
  441. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +261 -0
  442. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +106 -0
  443. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +115 -0
  444. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +484 -0
  445. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +159 -0
  446. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +2728 -0
  447. data/third_party/abseil-cpp/absl/synchronization/mutex.h +1056 -0
  448. data/third_party/abseil-cpp/absl/synchronization/notification.cc +78 -0
  449. data/third_party/abseil-cpp/absl/synchronization/notification.h +123 -0
  450. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +64 -0
  451. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +82 -0
  452. data/third_party/abseil-cpp/absl/types/internal/variant.h +1646 -0
  453. data/third_party/abseil-cpp/absl/types/variant.h +861 -0
  454. data/third_party/boringssl-with-bazel/err_data.c +266 -254
  455. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  457. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  458. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  459. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  460. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  461. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  462. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  463. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  464. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  465. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  467. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  468. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  469. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +159 -0
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +456 -0
  480. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +192 -0
  481. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  482. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  483. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  484. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  485. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  486. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +20 -0
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  501. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  503. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  504. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +52 -0
  505. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  506. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +2 -2
  507. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  508. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +72 -23
  509. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +2 -3
  510. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  511. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +800 -715
  512. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  513. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  514. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  515. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  516. data/third_party/boringssl-with-bazel/src/ssl/internal.h +21 -14
  517. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +3 -6
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +38 -0
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  521. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  522. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  523. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +34 -9
  524. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  525. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +17 -9
  526. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +5 -3
  527. data/third_party/re2/re2/bitmap256.h +117 -0
  528. data/third_party/re2/re2/bitstate.cc +385 -0
  529. data/third_party/re2/re2/compile.cc +1279 -0
  530. data/third_party/re2/re2/dfa.cc +2130 -0
  531. data/third_party/re2/re2/filtered_re2.cc +121 -0
  532. data/third_party/re2/re2/filtered_re2.h +109 -0
  533. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  534. data/third_party/re2/re2/nfa.cc +713 -0
  535. data/third_party/re2/re2/onepass.cc +623 -0
  536. data/third_party/re2/re2/parse.cc +2464 -0
  537. data/third_party/re2/re2/perl_groups.cc +119 -0
  538. data/third_party/re2/re2/pod_array.h +55 -0
  539. data/third_party/re2/re2/prefilter.cc +710 -0
  540. data/third_party/re2/re2/prefilter.h +108 -0
  541. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  542. data/third_party/re2/re2/prefilter_tree.h +139 -0
  543. data/third_party/re2/re2/prog.cc +988 -0
  544. data/third_party/re2/re2/prog.h +436 -0
  545. data/third_party/re2/re2/re2.cc +1362 -0
  546. data/third_party/re2/re2/re2.h +1002 -0
  547. data/third_party/re2/re2/regexp.cc +980 -0
  548. data/third_party/re2/re2/regexp.h +659 -0
  549. data/third_party/re2/re2/set.cc +154 -0
  550. data/third_party/re2/re2/set.h +80 -0
  551. data/third_party/re2/re2/simplify.cc +657 -0
  552. data/third_party/re2/re2/sparse_array.h +392 -0
  553. data/third_party/re2/re2/sparse_set.h +264 -0
  554. data/third_party/re2/re2/stringpiece.cc +65 -0
  555. data/third_party/re2/re2/stringpiece.h +210 -0
  556. data/third_party/re2/re2/tostring.cc +351 -0
  557. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  558. data/third_party/re2/re2/unicode_casefold.h +78 -0
  559. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  560. data/third_party/re2/re2/unicode_groups.h +67 -0
  561. data/third_party/re2/re2/walker-inl.h +246 -0
  562. data/third_party/re2/util/benchmark.h +156 -0
  563. data/third_party/re2/util/flags.h +26 -0
  564. data/third_party/re2/util/logging.h +109 -0
  565. data/third_party/re2/util/malloc_counter.h +19 -0
  566. data/third_party/re2/util/mix.h +41 -0
  567. data/third_party/re2/util/mutex.h +148 -0
  568. data/third_party/re2/util/pcre.cc +1025 -0
  569. data/third_party/re2/util/pcre.h +681 -0
  570. data/third_party/re2/util/rune.cc +260 -0
  571. data/third_party/re2/util/strutil.cc +149 -0
  572. data/third_party/re2/util/strutil.h +21 -0
  573. data/third_party/re2/util/test.h +50 -0
  574. data/third_party/re2/util/utf.h +44 -0
  575. data/third_party/re2/util/util.h +42 -0
  576. data/third_party/upb/upb/decode.c +517 -505
  577. data/third_party/upb/upb/encode.c +165 -123
  578. data/third_party/upb/upb/msg.c +130 -64
  579. data/third_party/upb/upb/msg.h +418 -14
  580. data/third_party/upb/upb/port_def.inc +35 -6
  581. data/third_party/upb/upb/port_undef.inc +8 -1
  582. data/third_party/upb/upb/table.c +53 -86
  583. data/third_party/upb/upb/table.int.h +11 -52
  584. data/third_party/upb/upb/upb.c +151 -125
  585. data/third_party/upb/upb/upb.h +91 -147
  586. data/third_party/upb/upb/upb.hpp +88 -0
  587. metadata +310 -148
  588. data/src/core/ext/filters/client_channel/xds/xds_api.cc +0 -1906
  589. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +0 -21
  590. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -35
  591. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +0 -114
  592. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +0 -418
  593. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +0 -72
  594. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +0 -197
  595. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +0 -105
  596. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +0 -378
  597. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +0 -53
  598. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +0 -403
  599. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +0 -1447
  600. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +0 -74
  601. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +0 -218
  602. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +0 -69
  603. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +0 -305
  604. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +0 -112
  605. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +0 -328
  606. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +0 -78
  607. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +0 -313
  608. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +0 -897
  609. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +0 -96
  610. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +0 -322
  611. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +0 -34
  612. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +0 -72
  613. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +0 -197
  614. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +0 -642
  615. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +0 -172
  616. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +0 -673
  617. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +0 -80
  618. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +0 -152
  619. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +0 -518
  620. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +0 -89
  621. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +0 -129
  622. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +0 -392
  623. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +0 -53
  624. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +0 -92
  625. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +0 -240
  626. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +0 -18
  627. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -33
  628. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +0 -91
  629. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +0 -266
  630. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +0 -112
  631. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +0 -324
  632. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +0 -53
  633. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +0 -109
  634. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +0 -399
  635. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +0 -18
  636. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -33
  637. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +0 -145
  638. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +0 -527
  639. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +0 -43
  640. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +0 -112
  641. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +0 -53
  642. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +0 -63
  643. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +0 -199
  644. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +0 -18
  645. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -33
  646. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +0 -815
  647. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +0 -3032
  648. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +0 -59
  649. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +0 -134
  650. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +0 -53
  651. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +0 -228
  652. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +0 -725
  653. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +0 -316
  654. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +0 -1132
  655. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +0 -65
  656. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +0 -51
  657. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +0 -125
  658. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +0 -50
  659. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +0 -54
  660. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +0 -134
  661. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +0 -63
  662. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +0 -144
  663. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +0 -53
  664. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +0 -133
  665. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +0 -88
  666. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +0 -258
  667. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +0 -87
  668. data/src/core/ext/upb-generated/envoy/type/range.upb.h +0 -112
  669. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +0 -62
  670. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +0 -89
  671. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +0 -249
  672. data/src/core/lib/security/transport/target_authority_table.cc +0 -75
  673. data/src/core/lib/security/transport/target_authority_table.h +0 -40
  674. data/src/core/lib/slice/slice_hash_table.h +0 -199
  675. data/src/core/lib/slice/slice_weak_hash_table.h +0 -102
  676. data/third_party/upb/upb/generated_util.h +0 -105
@@ -0,0 +1,44 @@
1
+ /*
2
+ * The authors of this software are Rob Pike and Ken Thompson.
3
+ * Copyright (c) 2002 by Lucent Technologies.
4
+ * Permission to use, copy, modify, and distribute this software for any
5
+ * purpose without fee is hereby granted, provided that this entire notice
6
+ * is included in all copies of any software which is or includes a copy
7
+ * or modification of this software and in all copies of the supporting
8
+ * documentation for such software.
9
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
10
+ * WARRANTY. IN PARTICULAR, NEITHER THE AUTHORS NOR LUCENT TECHNOLOGIES MAKE ANY
11
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
12
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
13
+ *
14
+ * This file and rune.cc have been converted to compile as C++ code
15
+ * in name space re2.
16
+ */
17
+
18
+ #ifndef UTIL_UTF_H_
19
+ #define UTIL_UTF_H_
20
+
21
+ #include <stdint.h>
22
+
23
+ namespace re2 {
24
+
25
+ typedef signed int Rune; /* Code-point values in Unicode 4.0 are 21 bits wide.*/
26
+
27
+ enum
28
+ {
29
+ UTFmax = 4, /* maximum bytes per rune */
30
+ Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */
31
+ Runeself = 0x80, /* rune and UTF sequences are the same (<) */
32
+ Runeerror = 0xFFFD, /* decoding error in UTF */
33
+ Runemax = 0x10FFFF, /* maximum rune value */
34
+ };
35
+
36
+ int runetochar(char* s, const Rune* r);
37
+ int chartorune(Rune* r, const char* s);
38
+ int fullrune(const char* s, int n);
39
+ int utflen(const char* s);
40
+ char* utfrune(const char*, Rune);
41
+
42
+ } // namespace re2
43
+
44
+ #endif // UTIL_UTF_H_
@@ -0,0 +1,42 @@
1
+ // Copyright 2009 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
+ #ifndef UTIL_UTIL_H_
6
+ #define UTIL_UTIL_H_
7
+
8
+ #define arraysize(array) (sizeof(array)/sizeof((array)[0]))
9
+
10
+ #ifndef ATTRIBUTE_NORETURN
11
+ #if defined(__GNUC__)
12
+ #define ATTRIBUTE_NORETURN __attribute__((noreturn))
13
+ #elif defined(_MSC_VER)
14
+ #define ATTRIBUTE_NORETURN __declspec(noreturn)
15
+ #else
16
+ #define ATTRIBUTE_NORETURN
17
+ #endif
18
+ #endif
19
+
20
+ #ifndef ATTRIBUTE_UNUSED
21
+ #if defined(__GNUC__)
22
+ #define ATTRIBUTE_UNUSED __attribute__((unused))
23
+ #else
24
+ #define ATTRIBUTE_UNUSED
25
+ #endif
26
+ #endif
27
+
28
+ #ifndef FALLTHROUGH_INTENDED
29
+ #if defined(__clang__)
30
+ #define FALLTHROUGH_INTENDED [[clang::fallthrough]]
31
+ #elif defined(__GNUC__) && __GNUC__ >= 7
32
+ #define FALLTHROUGH_INTENDED [[gnu::fallthrough]]
33
+ #else
34
+ #define FALLTHROUGH_INTENDED do {} while (0)
35
+ #endif
36
+ #endif
37
+
38
+ #ifndef NO_THREAD_SAFETY_ANALYSIS
39
+ #define NO_THREAD_SAFETY_ANALYSIS
40
+ #endif
41
+
42
+ #endif // UTIL_UTIL_H_
@@ -1,609 +1,621 @@
1
1
 
2
+ #include <setjmp.h>
2
3
  #include <string.h>
3
- #include "upb/upb.h"
4
+
4
5
  #include "upb/decode.h"
6
+ #include "upb/upb.h"
5
7
 
6
8
  #include "upb/port_def.inc"
7
9
 
8
10
  /* Maps descriptor type -> upb field type. */
9
- const uint8_t upb_desctype_to_fieldtype[] = {
10
- UPB_WIRE_TYPE_END_GROUP, /* ENDGROUP */
11
- UPB_TYPE_DOUBLE, /* DOUBLE */
12
- UPB_TYPE_FLOAT, /* FLOAT */
13
- UPB_TYPE_INT64, /* INT64 */
14
- UPB_TYPE_UINT64, /* UINT64 */
15
- UPB_TYPE_INT32, /* INT32 */
16
- UPB_TYPE_UINT64, /* FIXED64 */
17
- UPB_TYPE_UINT32, /* FIXED32 */
18
- UPB_TYPE_BOOL, /* BOOL */
19
- UPB_TYPE_STRING, /* STRING */
20
- UPB_TYPE_MESSAGE, /* GROUP */
21
- UPB_TYPE_MESSAGE, /* MESSAGE */
22
- UPB_TYPE_BYTES, /* BYTES */
23
- UPB_TYPE_UINT32, /* UINT32 */
24
- UPB_TYPE_ENUM, /* ENUM */
25
- UPB_TYPE_INT32, /* SFIXED32 */
26
- UPB_TYPE_INT64, /* SFIXED64 */
27
- UPB_TYPE_INT32, /* SINT32 */
28
- UPB_TYPE_INT64, /* SINT64 */
11
+ static const uint8_t desctype_to_fieldtype[] = {
12
+ -1, /* invalid descriptor type */
13
+ UPB_TYPE_DOUBLE, /* DOUBLE */
14
+ UPB_TYPE_FLOAT, /* FLOAT */
15
+ UPB_TYPE_INT64, /* INT64 */
16
+ UPB_TYPE_UINT64, /* UINT64 */
17
+ UPB_TYPE_INT32, /* INT32 */
18
+ UPB_TYPE_UINT64, /* FIXED64 */
19
+ UPB_TYPE_UINT32, /* FIXED32 */
20
+ UPB_TYPE_BOOL, /* BOOL */
21
+ UPB_TYPE_STRING, /* STRING */
22
+ UPB_TYPE_MESSAGE, /* GROUP */
23
+ UPB_TYPE_MESSAGE, /* MESSAGE */
24
+ UPB_TYPE_BYTES, /* BYTES */
25
+ UPB_TYPE_UINT32, /* UINT32 */
26
+ UPB_TYPE_ENUM, /* ENUM */
27
+ UPB_TYPE_INT32, /* SFIXED32 */
28
+ UPB_TYPE_INT64, /* SFIXED64 */
29
+ UPB_TYPE_INT32, /* SINT32 */
30
+ UPB_TYPE_INT64, /* SINT64 */
31
+ };
32
+
33
+ /* Maps descriptor type -> upb map size. */
34
+ static const uint8_t desctype_to_mapsize[] = {
35
+ -1, /* invalid descriptor type */
36
+ 8, /* DOUBLE */
37
+ 4, /* FLOAT */
38
+ 8, /* INT64 */
39
+ 8, /* UINT64 */
40
+ 4, /* INT32 */
41
+ 8, /* FIXED64 */
42
+ 4, /* FIXED32 */
43
+ 1, /* BOOL */
44
+ UPB_MAPTYPE_STRING, /* STRING */
45
+ sizeof(void *), /* GROUP */
46
+ sizeof(void *), /* MESSAGE */
47
+ UPB_MAPTYPE_STRING, /* BYTES */
48
+ 4, /* UINT32 */
49
+ 4, /* ENUM */
50
+ 4, /* SFIXED32 */
51
+ 8, /* SFIXED64 */
52
+ 4, /* SINT32 */
53
+ 8, /* SINT64 */
54
+ };
55
+
56
+ static const unsigned fixed32_ok = (1 << UPB_DTYPE_FLOAT) |
57
+ (1 << UPB_DTYPE_FIXED32) |
58
+ (1 << UPB_DTYPE_SFIXED32);
59
+
60
+ static const unsigned fixed64_ok = (1 << UPB_DTYPE_DOUBLE) |
61
+ (1 << UPB_DTYPE_FIXED64) |
62
+ (1 << UPB_DTYPE_SFIXED64);
63
+
64
+ /* Op: an action to be performed for a wire-type/field-type combination. */
65
+ #define OP_SCALAR_LG2(n) (n) /* n in [0, 2, 3] => op in [0, 2, 3] */
66
+ #define OP_STRING 4
67
+ #define OP_BYTES 5
68
+ #define OP_SUBMSG 6
69
+ /* Ops above are scalar-only. Repeated fields can use any op. */
70
+ #define OP_FIXPCK_LG2(n) (n + 5) /* n in [2, 3] => op in [7, 8] */
71
+ #define OP_VARPCK_LG2(n) (n + 9) /* n in [0, 2, 3] => op in [9, 11, 12] */
72
+
73
+ static const int8_t varint_ops[19] = {
74
+ -1, /* field not found */
75
+ -1, /* DOUBLE */
76
+ -1, /* FLOAT */
77
+ OP_SCALAR_LG2(3), /* INT64 */
78
+ OP_SCALAR_LG2(3), /* UINT64 */
79
+ OP_SCALAR_LG2(2), /* INT32 */
80
+ -1, /* FIXED64 */
81
+ -1, /* FIXED32 */
82
+ OP_SCALAR_LG2(0), /* BOOL */
83
+ -1, /* STRING */
84
+ -1, /* GROUP */
85
+ -1, /* MESSAGE */
86
+ -1, /* BYTES */
87
+ OP_SCALAR_LG2(2), /* UINT32 */
88
+ OP_SCALAR_LG2(2), /* ENUM */
89
+ -1, /* SFIXED32 */
90
+ -1, /* SFIXED64 */
91
+ OP_SCALAR_LG2(2), /* SINT32 */
92
+ OP_SCALAR_LG2(3), /* SINT64 */
93
+ };
94
+
95
+ static const int8_t delim_ops[37] = {
96
+ /* For non-repeated field type. */
97
+ -1, /* field not found */
98
+ -1, /* DOUBLE */
99
+ -1, /* FLOAT */
100
+ -1, /* INT64 */
101
+ -1, /* UINT64 */
102
+ -1, /* INT32 */
103
+ -1, /* FIXED64 */
104
+ -1, /* FIXED32 */
105
+ -1, /* BOOL */
106
+ OP_STRING, /* STRING */
107
+ -1, /* GROUP */
108
+ OP_SUBMSG, /* MESSAGE */
109
+ OP_BYTES, /* BYTES */
110
+ -1, /* UINT32 */
111
+ -1, /* ENUM */
112
+ -1, /* SFIXED32 */
113
+ -1, /* SFIXED64 */
114
+ -1, /* SINT32 */
115
+ -1, /* SINT64 */
116
+ /* For repeated field type. */
117
+ OP_FIXPCK_LG2(3), /* REPEATED DOUBLE */
118
+ OP_FIXPCK_LG2(2), /* REPEATED FLOAT */
119
+ OP_VARPCK_LG2(3), /* REPEATED INT64 */
120
+ OP_VARPCK_LG2(3), /* REPEATED UINT64 */
121
+ OP_VARPCK_LG2(2), /* REPEATED INT32 */
122
+ OP_FIXPCK_LG2(3), /* REPEATED FIXED64 */
123
+ OP_FIXPCK_LG2(2), /* REPEATED FIXED32 */
124
+ OP_VARPCK_LG2(0), /* REPEATED BOOL */
125
+ OP_STRING, /* REPEATED STRING */
126
+ OP_SUBMSG, /* REPEATED GROUP */
127
+ OP_SUBMSG, /* REPEATED MESSAGE */
128
+ OP_BYTES, /* REPEATED BYTES */
129
+ OP_VARPCK_LG2(2), /* REPEATED UINT32 */
130
+ OP_VARPCK_LG2(2), /* REPEATED ENUM */
131
+ OP_FIXPCK_LG2(2), /* REPEATED SFIXED32 */
132
+ OP_FIXPCK_LG2(3), /* REPEATED SFIXED64 */
133
+ OP_VARPCK_LG2(2), /* REPEATED SINT32 */
134
+ OP_VARPCK_LG2(3), /* REPEATED SINT64 */
29
135
  };
30
136
 
31
137
  /* Data pertaining to the parse. */
32
138
  typedef struct {
33
- const char *ptr; /* Current parsing position. */
34
- const char *field_start; /* Start of this field. */
35
- const char *limit; /* End of delimited region or end of buffer. */
139
+ const char *limit; /* End of delimited region or end of buffer. */
36
140
  upb_arena *arena;
37
141
  int depth;
38
- uint32_t end_group; /* Set to field number of END_GROUP tag, if any. */
142
+ uint32_t end_group; /* Set to field number of END_GROUP tag, if any. */
143
+ jmp_buf err;
39
144
  } upb_decstate;
40
145
 
41
- /* Data passed by value to each parsing function. */
42
- typedef struct {
43
- char *msg;
44
- const upb_msglayout *layout;
45
- upb_decstate *state;
46
- } upb_decframe;
47
-
48
- #define CHK(x) if (!(x)) { return 0; }
49
-
50
- static bool upb_skip_unknowngroup(upb_decstate *d, int field_number);
51
- static bool upb_decode_message(upb_decstate *d, char *msg,
52
- const upb_msglayout *l);
53
-
54
- static bool upb_decode_varint(const char **ptr, const char *limit,
55
- uint64_t *val) {
56
- uint8_t byte;
57
- int bitpos = 0;
58
- const char *p = *ptr;
59
- *val = 0;
60
-
61
- do {
62
- CHK(bitpos < 70 && p < limit);
63
- byte = *p;
64
- *val |= (uint64_t)(byte & 0x7F) << bitpos;
65
- p++;
66
- bitpos += 7;
67
- } while (byte & 0x80);
68
-
69
- *ptr = p;
70
- return true;
71
- }
72
-
73
- static bool upb_decode_varint32(const char **ptr, const char *limit,
74
- uint32_t *val) {
75
- uint64_t u64;
76
- CHK(upb_decode_varint(ptr, limit, &u64) && u64 <= UINT32_MAX);
77
- *val = (uint32_t)u64;
78
- return true;
79
- }
80
-
81
- static bool upb_decode_64bit(const char **ptr, const char *limit,
82
- uint64_t *val) {
83
- CHK(limit - *ptr >= 8);
84
- memcpy(val, *ptr, 8);
85
- *ptr += 8;
86
- return true;
87
- }
88
-
89
- static bool upb_decode_32bit(const char **ptr, const char *limit,
90
- uint32_t *val) {
91
- CHK(limit - *ptr >= 4);
92
- memcpy(val, *ptr, 4);
93
- *ptr += 4;
94
- return true;
95
- }
96
-
97
- static int32_t upb_zzdecode_32(uint32_t n) {
98
- return (n >> 1) ^ -(int32_t)(n & 1);
99
- }
100
-
101
- static int64_t upb_zzdecode_64(uint64_t n) {
102
- return (n >> 1) ^ -(int64_t)(n & 1);
103
- }
104
-
105
- static bool upb_decode_string(const char **ptr, const char *limit,
106
- int *outlen) {
107
- uint32_t len;
108
-
109
- CHK(upb_decode_varint32(ptr, limit, &len) &&
110
- len < INT32_MAX &&
111
- limit - *ptr >= (int32_t)len);
112
-
113
- *outlen = len;
114
- return true;
115
- }
116
-
117
- static void upb_set32(void *msg, size_t ofs, uint32_t val) {
118
- memcpy((char*)msg + ofs, &val, sizeof(val));
119
- }
120
-
121
- static bool upb_append_unknown(upb_decstate *d, upb_decframe *frame) {
122
- upb_msg_addunknown(frame->msg, d->field_start, d->ptr - d->field_start,
123
- d->arena);
124
- return true;
125
- }
126
-
127
-
128
- static bool upb_skip_unknownfielddata(upb_decstate *d, uint32_t tag,
129
- uint32_t group_fieldnum) {
130
- switch (tag & 7) {
131
- case UPB_WIRE_TYPE_VARINT: {
132
- uint64_t val;
133
- return upb_decode_varint(&d->ptr, d->limit, &val);
134
- }
135
- case UPB_WIRE_TYPE_32BIT: {
136
- uint32_t val;
137
- return upb_decode_32bit(&d->ptr, d->limit, &val);
146
+ typedef union {
147
+ bool bool_val;
148
+ uint32_t uint32_val;
149
+ uint64_t uint64_val;
150
+ upb_strview str_val;
151
+ } wireval;
152
+
153
+ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
154
+ const upb_msglayout *layout);
155
+
156
+ UPB_NORETURN static void decode_err(upb_decstate *d) { longjmp(d->err, 1); }
157
+
158
+ void decode_verifyutf8(upb_decstate *d, const char *buf, int len) {
159
+ static const uint8_t utf8_offset[] = {
160
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
161
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
162
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
163
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
164
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
165
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
166
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
167
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
168
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
169
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
170
+ 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0,
171
+ };
172
+
173
+ int i, j;
174
+ uint8_t offset;
175
+
176
+ i = 0;
177
+ while (i < len) {
178
+ offset = utf8_offset[(uint8_t)buf[i]];
179
+ if (offset == 0 || i + offset > len) {
180
+ decode_err(d);
138
181
  }
139
- case UPB_WIRE_TYPE_64BIT: {
140
- uint64_t val;
141
- return upb_decode_64bit(&d->ptr, d->limit, &val);
142
- }
143
- case UPB_WIRE_TYPE_DELIMITED: {
144
- int len;
145
- CHK(upb_decode_string(&d->ptr, d->limit, &len));
146
- d->ptr += len;
147
- return true;
182
+ for (j = i + 1; j < i + offset; j++) {
183
+ if ((buf[j] & 0xc0) != 0x80) {
184
+ decode_err(d);
185
+ }
148
186
  }
149
- case UPB_WIRE_TYPE_START_GROUP:
150
- return upb_skip_unknowngroup(d, tag >> 3);
151
- case UPB_WIRE_TYPE_END_GROUP:
152
- return (tag >> 3) == group_fieldnum;
187
+ i += offset;
153
188
  }
154
- return false;
189
+ if (i != len) decode_err(d);
155
190
  }
156
191
 
157
- static bool upb_skip_unknowngroup(upb_decstate *d, int field_number) {
158
- while (d->ptr < d->limit && d->end_group == 0) {
159
- uint32_t tag = 0;
160
- CHK(upb_decode_varint32(&d->ptr, d->limit, &tag));
161
- CHK(upb_skip_unknownfielddata(d, tag, field_number));
192
+ static bool decode_reserve(upb_decstate *d, upb_array *arr, size_t elem) {
193
+ bool need_realloc = arr->size - arr->len < elem;
194
+ if (need_realloc && !_upb_array_realloc(arr, arr->len + elem, d->arena)) {
195
+ decode_err(d);
162
196
  }
163
-
164
- CHK(d->end_group == field_number);
165
- d->end_group = 0;
166
- return true;
197
+ return need_realloc;
167
198
  }
168
199
 
169
- static bool upb_array_grow(upb_array *arr, size_t elements, size_t elem_size,
170
- upb_arena *arena) {
171
- size_t needed = arr->len + elements;
172
- size_t new_size = UPB_MAX(arr->size, 8);
173
- size_t new_bytes;
174
- size_t old_bytes;
175
- void *new_data;
176
- upb_alloc *alloc = upb_arena_alloc(arena);
177
-
178
- while (new_size < needed) {
179
- new_size *= 2;
180
- }
200
+ UPB_NOINLINE
201
+ static const char *decode_longvarint64(upb_decstate *d, const char *ptr,
202
+ const char *limit, uint64_t *val) {
203
+ uint8_t byte;
204
+ int bitpos = 0;
205
+ uint64_t out = 0;
181
206
 
182
- old_bytes = arr->len * elem_size;
183
- new_bytes = new_size * elem_size;
184
- new_data = upb_realloc(alloc, arr->data, old_bytes, new_bytes);
185
- CHK(new_data);
207
+ do {
208
+ if (bitpos >= 70 || ptr == limit) decode_err(d);
209
+ byte = *ptr;
210
+ out |= (uint64_t)(byte & 0x7F) << bitpos;
211
+ ptr++;
212
+ bitpos += 7;
213
+ } while (byte & 0x80);
186
214
 
187
- arr->data = new_data;
188
- arr->size = new_size;
189
- return true;
215
+ *val = out;
216
+ return ptr;
190
217
  }
191
218
 
192
- static void *upb_array_reserve(upb_array *arr, size_t elements,
193
- size_t elem_size, upb_arena *arena) {
194
- if (arr->size - arr->len < elements) {
195
- CHK(upb_array_grow(arr, elements, elem_size, arena));
219
+ UPB_FORCEINLINE
220
+ static const char *decode_varint64(upb_decstate *d, const char *ptr,
221
+ const char *limit, uint64_t *val) {
222
+ if (UPB_LIKELY(ptr < limit && (*ptr & 0x80) == 0)) {
223
+ *val = (uint8_t)*ptr;
224
+ return ptr + 1;
225
+ } else {
226
+ return decode_longvarint64(d, ptr, limit, val);
196
227
  }
197
- return (char*)arr->data + (arr->len * elem_size);
198
228
  }
199
229
 
200
- bool upb_array_add(upb_array *arr, size_t elements, size_t elem_size,
201
- const void *data, upb_arena *arena) {
202
- void *dest = upb_array_reserve(arr, elements, elem_size, arena);
203
-
204
- CHK(dest);
205
- arr->len += elements;
206
- memcpy(dest, data, elements * elem_size);
207
-
208
- return true;
209
- }
210
-
211
- static upb_array *upb_getarr(upb_decframe *frame,
212
- const upb_msglayout_field *field) {
213
- UPB_ASSERT(field->label == UPB_LABEL_REPEATED);
214
- return *(upb_array**)&frame->msg[field->offset];
230
+ static const char *decode_varint32(upb_decstate *d, const char *ptr,
231
+ const char *limit, uint32_t *val) {
232
+ uint64_t u64;
233
+ ptr = decode_varint64(d, ptr, limit, &u64);
234
+ if (u64 > UINT32_MAX) decode_err(d);
235
+ *val = (uint32_t)u64;
236
+ return ptr;
215
237
  }
216
238
 
217
- static upb_array *upb_getorcreatearr(upb_decframe *frame,
218
- const upb_msglayout_field *field) {
219
- upb_array *arr = upb_getarr(frame, field);
220
-
221
- if (!arr) {
222
- arr = upb_array_new(frame->state->arena);
223
- CHK(arr);
224
- *(upb_array**)&frame->msg[field->offset] = arr;
239
+ static void decode_munge(int type, wireval *val) {
240
+ switch (type) {
241
+ case UPB_DESCRIPTOR_TYPE_BOOL:
242
+ val->bool_val = val->uint64_val != 0;
243
+ break;
244
+ case UPB_DESCRIPTOR_TYPE_SINT32: {
245
+ uint32_t n = val->uint32_val;
246
+ val->uint32_val = (n >> 1) ^ -(int32_t)(n & 1);
247
+ break;
248
+ }
249
+ case UPB_DESCRIPTOR_TYPE_SINT64: {
250
+ uint64_t n = val->uint64_val;
251
+ val->uint64_val = (n >> 1) ^ -(int64_t)(n & 1);
252
+ break;
253
+ }
254
+ case UPB_DESCRIPTOR_TYPE_INT32:
255
+ case UPB_DESCRIPTOR_TYPE_UINT32:
256
+ if (!_upb_isle()) {
257
+ /* The next stage will memcpy(dst, &val, 4) */
258
+ val->uint32_val = val->uint64_val;
259
+ }
260
+ break;
225
261
  }
226
-
227
- return arr;
228
262
  }
229
263
 
230
- static upb_msg *upb_getorcreatemsg(upb_decframe *frame,
231
- const upb_msglayout_field *field,
232
- const upb_msglayout **subm) {
233
- upb_msg **submsg = (void*)(frame->msg + field->offset);
234
- *subm = frame->layout->submsgs[field->submsg_index];
235
-
236
- UPB_ASSERT(field->label != UPB_LABEL_REPEATED);
264
+ static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
265
+ uint32_t field_number) {
266
+ static upb_msglayout_field none = {0, 0, 0, 0, 0, 0};
237
267
 
238
- if (!*submsg) {
239
- *submsg = upb_msg_new(*subm, frame->state->arena);
240
- CHK(*submsg);
268
+ /* Lots of optimization opportunities here. */
269
+ int i;
270
+ if (l == NULL) return &none;
271
+ for (i = 0; i < l->field_count; i++) {
272
+ if (l->fields[i].number == field_number) {
273
+ return &l->fields[i];
274
+ }
241
275
  }
242
276
 
243
- return *submsg;
277
+ return &none; /* Unknown field. */
244
278
  }
245
279
 
246
- static upb_msg *upb_addmsg(upb_decframe *frame,
247
- const upb_msglayout_field *field,
248
- const upb_msglayout **subm) {
249
- upb_msg *submsg;
250
- upb_array *arr = upb_getorcreatearr(frame, field);
251
-
252
- UPB_ASSERT(field->label == UPB_LABEL_REPEATED);
253
- UPB_ASSERT(field->descriptortype == UPB_DESCRIPTOR_TYPE_MESSAGE ||
254
- field->descriptortype == UPB_DESCRIPTOR_TYPE_GROUP);
255
-
256
- *subm = frame->layout->submsgs[field->submsg_index];
257
- submsg = upb_msg_new(*subm, frame->state->arena);
258
- CHK(submsg);
259
- upb_array_add(arr, 1, sizeof(submsg), &submsg, frame->state->arena);
260
-
261
- return submsg;
280
+ static upb_msg *decode_newsubmsg(upb_decstate *d, const upb_msglayout *layout,
281
+ const upb_msglayout_field *field) {
282
+ const upb_msglayout *subl = layout->submsgs[field->submsg_index];
283
+ return _upb_msg_new(subl, d->arena);
262
284
  }
263
285
 
264
- static void upb_sethasbit(upb_decframe *frame,
265
- const upb_msglayout_field *field) {
266
- int32_t hasbit = field->presence;
267
- UPB_ASSERT(field->presence > 0);
268
- frame->msg[hasbit / 8] |= (1 << (hasbit % 8));
269
- }
270
-
271
- static void upb_setoneofcase(upb_decframe *frame,
272
- const upb_msglayout_field *field) {
273
- UPB_ASSERT(field->presence < 0);
274
- upb_set32(frame->msg, ~field->presence, field->number);
286
+ static void decode_tosubmsg(upb_decstate *d, upb_msg *submsg,
287
+ const upb_msglayout *layout,
288
+ const upb_msglayout_field *field, upb_strview val) {
289
+ const upb_msglayout *subl = layout->submsgs[field->submsg_index];
290
+ const char *saved_limit = d->limit;
291
+ if (--d->depth < 0) decode_err(d);
292
+ d->limit = val.data + val.size;
293
+ decode_msg(d, val.data, submsg, subl);
294
+ d->limit = saved_limit;
295
+ if (d->end_group != 0) decode_err(d);
296
+ d->depth++;
275
297
  }
276
298
 
277
- static bool upb_decode_addval(upb_decframe *frame,
278
- const upb_msglayout_field *field, void *val,
279
- size_t size) {
280
- char *field_mem = frame->msg + field->offset;
281
- upb_array *arr;
282
-
283
- if (field->label == UPB_LABEL_REPEATED) {
284
- arr = upb_getorcreatearr(frame, field);
285
- CHK(arr);
286
- field_mem = upb_array_reserve(arr, 1, size, frame->state->arena);
287
- CHK(field_mem);
288
- }
289
-
290
- memcpy(field_mem, val, size);
291
- return true;
299
+ static const char *decode_group(upb_decstate *d, const char *ptr,
300
+ upb_msg *submsg, const upb_msglayout *subl,
301
+ uint32_t number) {
302
+ if (--d->depth < 0) decode_err(d);
303
+ ptr = decode_msg(d, ptr, submsg, subl);
304
+ if (d->end_group != number) decode_err(d);
305
+ d->end_group = 0;
306
+ d->depth++;
307
+ return ptr;
292
308
  }
293
309
 
294
- static void upb_decode_setpresent(upb_decframe *frame,
310
+ static const char *decode_togroup(upb_decstate *d, const char *ptr,
311
+ upb_msg *submsg, const upb_msglayout *layout,
295
312
  const upb_msglayout_field *field) {
296
- if (field->label == UPB_LABEL_REPEATED) {
297
- upb_array *arr = upb_getarr(frame, field);
298
- UPB_ASSERT(arr->len < arr->size);
299
- arr->len++;
300
- } else if (field->presence < 0) {
301
- upb_setoneofcase(frame, field);
302
- } else if (field->presence > 0) {
303
- upb_sethasbit(frame, field);
304
- }
313
+ const upb_msglayout *subl = layout->submsgs[field->submsg_index];
314
+ return decode_group(d, ptr, submsg, subl, field->number);
305
315
  }
306
316
 
307
- static bool upb_decode_msgfield(upb_decstate *d, upb_msg *msg,
308
- const upb_msglayout *layout, int limit) {
309
- const char* saved_limit = d->limit;
310
- d->limit = d->ptr + limit;
311
- CHK(--d->depth >= 0);
312
- upb_decode_message(d, msg, layout);
313
- d->depth++;
314
- d->limit = saved_limit;
315
- CHK(d->end_group == 0);
316
- return true;
317
- }
317
+ static const char *decode_toarray(upb_decstate *d, const char *ptr,
318
+ upb_msg *msg, const upb_msglayout *layout,
319
+ const upb_msglayout_field *field, wireval val,
320
+ int op) {
321
+ upb_array **arrp = UPB_PTR_AT(msg, field->offset, void);
322
+ upb_array *arr = *arrp;
323
+ void *mem;
318
324
 
319
- static bool upb_decode_groupfield(upb_decstate *d, upb_msg *msg,
320
- const upb_msglayout *layout,
321
- int field_number) {
322
- CHK(--d->depth >= 0);
323
- upb_decode_message(d, msg, layout);
324
- d->depth++;
325
- CHK(d->end_group == field_number);
326
- d->end_group = 0;
327
- return true;
328
- }
329
-
330
- static bool upb_decode_varintfield(upb_decstate *d, upb_decframe *frame,
331
- const upb_msglayout_field *field) {
332
- uint64_t val;
333
- CHK(upb_decode_varint(&d->ptr, d->limit, &val));
325
+ if (!arr) {
326
+ upb_fieldtype_t type = desctype_to_fieldtype[field->descriptortype];
327
+ arr = _upb_array_new(d->arena, type);
328
+ if (!arr) decode_err(d);
329
+ *arrp = arr;
330
+ }
334
331
 
335
- switch (field->descriptortype) {
336
- case UPB_DESCRIPTOR_TYPE_INT64:
337
- case UPB_DESCRIPTOR_TYPE_UINT64:
338
- CHK(upb_decode_addval(frame, field, &val, sizeof(val)));
339
- break;
340
- case UPB_DESCRIPTOR_TYPE_INT32:
341
- case UPB_DESCRIPTOR_TYPE_UINT32:
342
- case UPB_DESCRIPTOR_TYPE_ENUM: {
343
- uint32_t val32 = (uint32_t)val;
344
- CHK(upb_decode_addval(frame, field, &val32, sizeof(val32)));
345
- break;
346
- }
347
- case UPB_DESCRIPTOR_TYPE_BOOL: {
348
- bool valbool = val != 0;
349
- CHK(upb_decode_addval(frame, field, &valbool, sizeof(valbool)));
350
- break;
332
+ decode_reserve(d, arr, 1);
333
+
334
+ switch (op) {
335
+ case OP_SCALAR_LG2(0):
336
+ case OP_SCALAR_LG2(2):
337
+ case OP_SCALAR_LG2(3):
338
+ /* Append scalar value. */
339
+ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << op, void);
340
+ arr->len++;
341
+ memcpy(mem, &val, 1 << op);
342
+ return ptr;
343
+ case OP_STRING:
344
+ decode_verifyutf8(d, val.str_val.data, val.str_val.size);
345
+ /* Fallthrough. */
346
+ case OP_BYTES:
347
+ /* Append bytes. */
348
+ mem =
349
+ UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(upb_strview), void);
350
+ arr->len++;
351
+ memcpy(mem, &val, sizeof(upb_strview));
352
+ return ptr;
353
+ case OP_SUBMSG: {
354
+ /* Append submessage / group. */
355
+ upb_msg *submsg = decode_newsubmsg(d, layout, field);
356
+ *UPB_PTR_AT(_upb_array_ptr(arr), arr->len * sizeof(void *), upb_msg *) =
357
+ submsg;
358
+ arr->len++;
359
+ if (UPB_UNLIKELY(field->descriptortype == UPB_DTYPE_GROUP)) {
360
+ ptr = decode_togroup(d, ptr, submsg, layout, field);
361
+ } else {
362
+ decode_tosubmsg(d, submsg, layout, field, val.str_val);
363
+ }
364
+ return ptr;
351
365
  }
352
- case UPB_DESCRIPTOR_TYPE_SINT32: {
353
- int32_t decoded = upb_zzdecode_32((uint32_t)val);
354
- CHK(upb_decode_addval(frame, field, &decoded, sizeof(decoded)));
355
- break;
366
+ case OP_FIXPCK_LG2(2):
367
+ case OP_FIXPCK_LG2(3): {
368
+ /* Fixed packed. */
369
+ int lg2 = op - OP_FIXPCK_LG2(0);
370
+ int mask = (1 << lg2) - 1;
371
+ size_t count = val.str_val.size >> lg2;
372
+ if ((val.str_val.size & mask) != 0) {
373
+ decode_err(d); /* Length isn't a round multiple of elem size. */
374
+ }
375
+ decode_reserve(d, arr, count);
376
+ mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
377
+ arr->len += count;
378
+ memcpy(mem, val.str_val.data, val.str_val.size);
379
+ return ptr;
356
380
  }
357
- case UPB_DESCRIPTOR_TYPE_SINT64: {
358
- int64_t decoded = upb_zzdecode_64(val);
359
- CHK(upb_decode_addval(frame, field, &decoded, sizeof(decoded)));
360
- break;
381
+ case OP_VARPCK_LG2(0):
382
+ case OP_VARPCK_LG2(2):
383
+ case OP_VARPCK_LG2(3): {
384
+ /* Varint packed. */
385
+ int lg2 = op - OP_VARPCK_LG2(0);
386
+ int scale = 1 << lg2;
387
+ const char *ptr = val.str_val.data;
388
+ const char *end = ptr + val.str_val.size;
389
+ char *out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
390
+ while (ptr < end) {
391
+ wireval elem;
392
+ ptr = decode_varint64(d, ptr, end, &elem.uint64_val);
393
+ decode_munge(field->descriptortype, &elem);
394
+ if (decode_reserve(d, arr, 1)) {
395
+ out = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
396
+ }
397
+ arr->len++;
398
+ memcpy(out, &elem, scale);
399
+ out += scale;
400
+ }
401
+ if (ptr != end) decode_err(d);
402
+ return ptr;
361
403
  }
362
404
  default:
363
- return upb_append_unknown(d, frame);
405
+ UPB_UNREACHABLE();
364
406
  }
365
-
366
- upb_decode_setpresent(frame, field);
367
- return true;
368
407
  }
369
408
 
370
- static bool upb_decode_64bitfield(upb_decstate *d, upb_decframe *frame,
371
- const upb_msglayout_field *field) {
372
- uint64_t val;
373
- CHK(upb_decode_64bit(&d->ptr, d->limit, &val));
374
-
375
- switch (field->descriptortype) {
376
- case UPB_DESCRIPTOR_TYPE_DOUBLE:
377
- case UPB_DESCRIPTOR_TYPE_FIXED64:
378
- case UPB_DESCRIPTOR_TYPE_SFIXED64:
379
- CHK(upb_decode_addval(frame, field, &val, sizeof(val)));
380
- break;
381
- default:
382
- return upb_append_unknown(d, frame);
409
+ static void decode_tomap(upb_decstate *d, upb_msg *msg,
410
+ const upb_msglayout *layout,
411
+ const upb_msglayout_field *field, wireval val) {
412
+ upb_map **map_p = UPB_PTR_AT(msg, field->offset, upb_map *);
413
+ upb_map *map = *map_p;
414
+ upb_map_entry ent;
415
+ const upb_msglayout *entry = layout->submsgs[field->submsg_index];
416
+
417
+ if (!map) {
418
+ /* Lazily create map. */
419
+ const upb_msglayout *entry = layout->submsgs[field->submsg_index];
420
+ const upb_msglayout_field *key_field = &entry->fields[0];
421
+ const upb_msglayout_field *val_field = &entry->fields[1];
422
+ char key_size = desctype_to_mapsize[key_field->descriptortype];
423
+ char val_size = desctype_to_mapsize[val_field->descriptortype];
424
+ UPB_ASSERT(key_field->offset == 0);
425
+ UPB_ASSERT(val_field->offset == sizeof(upb_strview));
426
+ map = _upb_map_new(d->arena, key_size, val_size);
427
+ *map_p = map;
383
428
  }
384
429
 
385
- upb_decode_setpresent(frame, field);
386
- return true;
387
- }
430
+ /* Parse map entry. */
431
+ memset(&ent, 0, sizeof(ent));
388
432
 
389
- static bool upb_decode_32bitfield(upb_decstate *d, upb_decframe *frame,
390
- const upb_msglayout_field *field) {
391
- uint32_t val;
392
- CHK(upb_decode_32bit(&d->ptr, d->limit, &val));
393
-
394
- switch (field->descriptortype) {
395
- case UPB_DESCRIPTOR_TYPE_FLOAT:
396
- case UPB_DESCRIPTOR_TYPE_FIXED32:
397
- case UPB_DESCRIPTOR_TYPE_SFIXED32:
398
- CHK(upb_decode_addval(frame, field, &val, sizeof(val)));
399
- break;
400
- default:
401
- return upb_append_unknown(d, frame);
433
+ if (entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_MESSAGE ||
434
+ entry->fields[1].descriptortype == UPB_DESCRIPTOR_TYPE_GROUP) {
435
+ /* Create proactively to handle the case where it doesn't appear. */
436
+ ent.v.val = upb_value_ptr(_upb_msg_new(entry->submsgs[0], d->arena));
402
437
  }
403
438
 
404
- upb_decode_setpresent(frame, field);
405
- return true;
406
- }
407
-
408
- static bool upb_decode_fixedpacked(upb_decstate *d, upb_array *arr,
409
- uint32_t len, int elem_size) {
410
- size_t elements = len / elem_size;
411
-
412
- CHK((size_t)(elements * elem_size) == len);
413
- CHK(upb_array_add(arr, elements, elem_size, d->ptr, d->arena));
414
- d->ptr += len;
439
+ decode_tosubmsg(d, &ent.k, layout, field, val.str_val);
415
440
 
416
- return true;
441
+ /* Insert into map. */
442
+ _upb_map_set(map, &ent.k, map->key_size, &ent.v, map->val_size, d->arena);
417
443
  }
418
444
 
419
- static upb_strview upb_decode_strfield(upb_decstate *d, uint32_t len) {
420
- upb_strview ret;
421
- ret.data = d->ptr;
422
- ret.size = len;
423
- d->ptr += len;
424
- return ret;
425
- }
426
-
427
- static bool upb_decode_toarray(upb_decstate *d, upb_decframe *frame,
428
- const upb_msglayout_field *field, int len) {
429
- upb_array *arr = upb_getorcreatearr(frame, field);
430
- CHK(arr);
431
-
432
- #define VARINT_CASE(ctype, decode) \
433
- VARINT_CASE_EX(ctype, decode, decode)
434
-
435
- #define VARINT_CASE_EX(ctype, decode, dtype) \
436
- { \
437
- const char *ptr = d->ptr; \
438
- const char *limit = ptr + len; \
439
- while (ptr < limit) { \
440
- uint64_t val; \
441
- ctype decoded; \
442
- CHK(upb_decode_varint(&ptr, limit, &val)); \
443
- decoded = (decode)((dtype)val); \
444
- CHK(upb_array_add(arr, 1, sizeof(decoded), &decoded, d->arena)); \
445
- } \
446
- d->ptr = ptr; \
447
- return true; \
448
- }
445
+ static const char *decode_tomsg(upb_decstate *d, const char *ptr, upb_msg *msg,
446
+ const upb_msglayout *layout,
447
+ const upb_msglayout_field *field, wireval val,
448
+ int op) {
449
+ void *mem = UPB_PTR_AT(msg, field->offset, void);
450
+ int type = field->descriptortype;
449
451
 
450
- switch (field->descriptortype) {
451
- case UPB_DESCRIPTOR_TYPE_STRING:
452
- case UPB_DESCRIPTOR_TYPE_BYTES: {
453
- upb_strview str = upb_decode_strfield(d, len);
454
- return upb_array_add(arr, 1, sizeof(str), &str, d->arena);
452
+ /* Set presence if necessary. */
453
+ if (field->presence < 0) {
454
+ /* Oneof case */
455
+ uint32_t *oneof_case = _upb_oneofcase_field(msg, field);
456
+ if (op == OP_SUBMSG && *oneof_case != field->number) {
457
+ memset(mem, 0, sizeof(void*));
455
458
  }
456
- case UPB_DESCRIPTOR_TYPE_FLOAT:
457
- case UPB_DESCRIPTOR_TYPE_FIXED32:
458
- case UPB_DESCRIPTOR_TYPE_SFIXED32:
459
- return upb_decode_fixedpacked(d, arr, len, sizeof(int32_t));
460
- case UPB_DESCRIPTOR_TYPE_DOUBLE:
461
- case UPB_DESCRIPTOR_TYPE_FIXED64:
462
- case UPB_DESCRIPTOR_TYPE_SFIXED64:
463
- return upb_decode_fixedpacked(d, arr, len, sizeof(int64_t));
464
- case UPB_DESCRIPTOR_TYPE_INT32:
465
- case UPB_DESCRIPTOR_TYPE_UINT32:
466
- case UPB_DESCRIPTOR_TYPE_ENUM:
467
- VARINT_CASE(uint32_t, uint32_t);
468
- case UPB_DESCRIPTOR_TYPE_INT64:
469
- case UPB_DESCRIPTOR_TYPE_UINT64:
470
- VARINT_CASE(uint64_t, uint64_t);
471
- case UPB_DESCRIPTOR_TYPE_BOOL:
472
- VARINT_CASE(bool, bool);
473
- case UPB_DESCRIPTOR_TYPE_SINT32:
474
- VARINT_CASE_EX(int32_t, upb_zzdecode_32, uint32_t);
475
- case UPB_DESCRIPTOR_TYPE_SINT64:
476
- VARINT_CASE_EX(int64_t, upb_zzdecode_64, uint64_t);
477
- case UPB_DESCRIPTOR_TYPE_MESSAGE: {
478
- const upb_msglayout *subm;
479
- upb_msg *submsg = upb_addmsg(frame, field, &subm);
480
- CHK(submsg);
481
- return upb_decode_msgfield(d, submsg, subm, len);
482
- }
483
- case UPB_DESCRIPTOR_TYPE_GROUP:
484
- return upb_append_unknown(d, frame);
459
+ *oneof_case = field->number;
460
+ } else if (field->presence > 0) {
461
+ _upb_sethas_field(msg, field);
485
462
  }
486
- #undef VARINT_CASE
487
- UPB_UNREACHABLE();
488
- }
489
-
490
- static bool upb_decode_delimitedfield(upb_decstate *d, upb_decframe *frame,
491
- const upb_msglayout_field *field) {
492
- int len;
493
-
494
- CHK(upb_decode_string(&d->ptr, d->limit, &len));
495
463
 
496
- if (field->label == UPB_LABEL_REPEATED) {
497
- return upb_decode_toarray(d, frame, field, len);
498
- } else {
499
- switch (field->descriptortype) {
500
- case UPB_DESCRIPTOR_TYPE_STRING:
501
- case UPB_DESCRIPTOR_TYPE_BYTES: {
502
- upb_strview str = upb_decode_strfield(d, len);
503
- CHK(upb_decode_addval(frame, field, &str, sizeof(str)));
504
- break;
464
+ /* Store into message. */
465
+ switch (op) {
466
+ case OP_SUBMSG: {
467
+ upb_msg **submsgp = mem;
468
+ upb_msg *submsg = *submsgp;
469
+ if (!submsg) {
470
+ submsg = decode_newsubmsg(d, layout, field);
471
+ *submsgp = submsg;
505
472
  }
506
- case UPB_DESCRIPTOR_TYPE_MESSAGE: {
507
- const upb_msglayout *subm;
508
- upb_msg *submsg = upb_getorcreatemsg(frame, field, &subm);
509
- CHK(submsg);
510
- CHK(upb_decode_msgfield(d, submsg, subm, len));
511
- break;
473
+ if (UPB_UNLIKELY(type == UPB_DTYPE_GROUP)) {
474
+ ptr = decode_togroup(d, ptr, submsg, layout, field);
475
+ } else {
476
+ decode_tosubmsg(d, submsg, layout, field, val.str_val);
512
477
  }
513
- default:
514
- /* TODO(haberman): should we accept the last element of a packed? */
515
- d->ptr += len;
516
- return upb_append_unknown(d, frame);
517
- }
518
- upb_decode_setpresent(frame, field);
519
- return true;
520
- }
521
- }
522
-
523
- static const upb_msglayout_field *upb_find_field(const upb_msglayout *l,
524
- uint32_t field_number) {
525
- /* Lots of optimization opportunities here. */
526
- int i;
527
- for (i = 0; i < l->field_count; i++) {
528
- if (l->fields[i].number == field_number) {
529
- return &l->fields[i];
478
+ break;
530
479
  }
480
+ case OP_STRING:
481
+ decode_verifyutf8(d, val.str_val.data, val.str_val.size);
482
+ /* Fallthrough. */
483
+ case OP_BYTES:
484
+ memcpy(mem, &val, sizeof(upb_strview));
485
+ break;
486
+ case OP_SCALAR_LG2(3):
487
+ memcpy(mem, &val, 8);
488
+ break;
489
+ case OP_SCALAR_LG2(2):
490
+ memcpy(mem, &val, 4);
491
+ break;
492
+ case OP_SCALAR_LG2(0):
493
+ memcpy(mem, &val, 1);
494
+ break;
495
+ default:
496
+ UPB_UNREACHABLE();
531
497
  }
532
498
 
533
- return NULL; /* Unknown field. */
499
+ return ptr;
534
500
  }
535
501
 
536
- static bool upb_decode_field(upb_decstate *d, upb_decframe *frame) {
537
- uint32_t tag;
538
- const upb_msglayout_field *field;
539
- int field_number;
502
+ static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
503
+ const upb_msglayout *layout) {
504
+ while (ptr < d->limit) {
505
+ uint32_t tag;
506
+ const upb_msglayout_field *field;
507
+ int field_number;
508
+ int wire_type;
509
+ const char *field_start = ptr;
510
+ wireval val;
511
+ int op;
512
+
513
+ ptr = decode_varint32(d, ptr, d->limit, &tag);
514
+ field_number = tag >> 3;
515
+ wire_type = tag & 7;
540
516
 
541
- d->field_start = d->ptr;
542
- CHK(upb_decode_varint32(&d->ptr, d->limit, &tag));
543
- field_number = tag >> 3;
544
- field = upb_find_field(frame->layout, field_number);
517
+ field = upb_find_field(layout, field_number);
545
518
 
546
- if (field) {
547
- switch (tag & 7) {
519
+ switch (wire_type) {
548
520
  case UPB_WIRE_TYPE_VARINT:
549
- return upb_decode_varintfield(d, frame, field);
521
+ ptr = decode_varint64(d, ptr, d->limit, &val.uint64_val);
522
+ op = varint_ops[field->descriptortype];
523
+ decode_munge(field->descriptortype, &val);
524
+ break;
550
525
  case UPB_WIRE_TYPE_32BIT:
551
- return upb_decode_32bitfield(d, frame, field);
526
+ if (d->limit - ptr < 4) decode_err(d);
527
+ memcpy(&val.uint32_val, ptr, 4);
528
+ val.uint32_val = _upb_be_swap32(val.uint32_val);
529
+ ptr += 4;
530
+ op = OP_SCALAR_LG2(2);
531
+ if (((1 << field->descriptortype) & fixed32_ok) == 0) goto unknown;
532
+ break;
552
533
  case UPB_WIRE_TYPE_64BIT:
553
- return upb_decode_64bitfield(d, frame, field);
554
- case UPB_WIRE_TYPE_DELIMITED:
555
- return upb_decode_delimitedfield(d, frame, field);
556
- case UPB_WIRE_TYPE_START_GROUP: {
557
- const upb_msglayout *layout;
558
- upb_msg *group;
559
-
560
- if (field->label == UPB_LABEL_REPEATED) {
561
- group = upb_addmsg(frame, field, &layout);
562
- } else {
563
- group = upb_getorcreatemsg(frame, field, &layout);
534
+ if (d->limit - ptr < 8) decode_err(d);
535
+ memcpy(&val.uint64_val, ptr, 8);
536
+ val.uint64_val = _upb_be_swap64(val.uint64_val);
537
+ ptr += 8;
538
+ op = OP_SCALAR_LG2(3);
539
+ if (((1 << field->descriptortype) & fixed64_ok) == 0) goto unknown;
540
+ break;
541
+ case UPB_WIRE_TYPE_DELIMITED: {
542
+ uint32_t size;
543
+ int ndx = field->descriptortype;
544
+ if (_upb_isrepeated(field)) ndx += 18;
545
+ ptr = decode_varint32(d, ptr, d->limit, &size);
546
+ if (size >= INT32_MAX || (size_t)(d->limit - ptr) < size) {
547
+ decode_err(d); /* Length overflow. */
564
548
  }
565
-
566
- return upb_decode_groupfield(d, group, layout, field_number);
549
+ val.str_val.data = ptr;
550
+ val.str_val.size = size;
551
+ ptr += size;
552
+ op = delim_ops[ndx];
553
+ break;
567
554
  }
555
+ case UPB_WIRE_TYPE_START_GROUP:
556
+ val.uint32_val = field_number;
557
+ op = OP_SUBMSG;
558
+ if (field->descriptortype != UPB_DTYPE_GROUP) goto unknown;
559
+ break;
568
560
  case UPB_WIRE_TYPE_END_GROUP:
569
561
  d->end_group = field_number;
570
- return true;
562
+ return ptr;
571
563
  default:
572
- CHK(false);
564
+ decode_err(d);
573
565
  }
574
- } else {
575
- CHK(field_number != 0);
576
- CHK(upb_skip_unknownfielddata(d, tag, -1));
577
- CHK(upb_append_unknown(d, frame));
578
- return true;
579
- }
580
- UPB_UNREACHABLE();
581
- }
582
566
 
583
- static bool upb_decode_message(upb_decstate *d, char *msg, const upb_msglayout *l) {
584
- upb_decframe frame;
585
- frame.msg = msg;
586
- frame.layout = l;
587
- frame.state = d;
588
-
589
- while (d->ptr < d->limit) {
590
- CHK(upb_decode_field(d, &frame));
567
+ if (op >= 0) {
568
+ /* Parse, using op for dispatch. */
569
+ switch (field->label) {
570
+ case UPB_LABEL_REPEATED:
571
+ case _UPB_LABEL_PACKED:
572
+ ptr = decode_toarray(d, ptr, msg, layout, field, val, op);
573
+ break;
574
+ case _UPB_LABEL_MAP:
575
+ decode_tomap(d, msg, layout, field, val);
576
+ break;
577
+ default:
578
+ ptr = decode_tomsg(d, ptr, msg, layout, field, val, op);
579
+ break;
580
+ }
581
+ } else {
582
+ unknown:
583
+ /* Skip unknown field. */
584
+ if (field_number == 0) decode_err(d);
585
+ if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
586
+ ptr = decode_group(d, ptr, NULL, NULL, field_number);
587
+ }
588
+ if (msg) {
589
+ if (!_upb_msg_addunknown(msg, field_start, ptr - field_start,
590
+ d->arena)) {
591
+ decode_err(d);
592
+ }
593
+ }
594
+ }
591
595
  }
592
596
 
593
- return true;
597
+ if (ptr != d->limit) decode_err(d);
598
+ return ptr;
594
599
  }
595
600
 
596
601
  bool upb_decode(const char *buf, size_t size, void *msg, const upb_msglayout *l,
597
602
  upb_arena *arena) {
598
603
  upb_decstate state;
599
- state.ptr = buf;
600
604
  state.limit = buf + size;
601
605
  state.arena = arena;
602
606
  state.depth = 64;
603
607
  state.end_group = 0;
604
608
 
605
- CHK(upb_decode_message(&state, msg, l));
609
+ if (setjmp(state.err)) return false;
610
+
611
+ if (size == 0) return true;
612
+ decode_msg(&state, buf, msg, l);
613
+
606
614
  return state.end_group == 0;
607
615
  }
608
616
 
609
- #undef CHK
617
+ #undef OP_SCALAR_LG2
618
+ #undef OP_FIXPCK_LG2
619
+ #undef OP_VARPCK_LG2
620
+ #undef OP_STRING
621
+ #undef OP_SUBMSG