grpc 1.30.0 → 1.31.1

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 (383) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +560 -619
  3. data/include/grpc/grpc_security.h +8 -0
  4. data/include/grpc/grpc_security_constants.h +3 -0
  5. data/include/grpc/impl/codegen/grpc_types.h +7 -5
  6. data/include/grpc/impl/codegen/port_platform.h +0 -32
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
  8. data/src/core/ext/filters/client_channel/client_channel.cc +406 -261
  9. data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
  10. data/src/core/ext/filters/client_channel/config_selector.h +93 -0
  11. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
  13. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
  15. data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
  17. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
  18. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -4
  19. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +381 -72
  20. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
  21. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
  22. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
  23. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
  26. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
  27. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  28. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
  29. data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
  30. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
  31. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
  32. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
  33. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
  34. data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
  35. data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
  36. data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
  37. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
  38. data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
  39. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
  40. data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
  41. data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
  42. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
  43. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
  44. data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
  45. data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
  46. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
  47. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
  48. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
  49. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
  50. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
  51. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
  52. data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
  53. data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
  54. data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
  55. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
  56. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  57. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
  58. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
  59. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
  60. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
  61. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
  62. data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
  63. data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
  64. data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
  65. data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
  66. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
  67. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
  68. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
  69. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
  70. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
  71. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
  72. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
  73. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
  74. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
  75. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
  76. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
  77. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
  78. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
  79. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
  80. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
  81. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
  82. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
  83. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
  84. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
  85. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
  86. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
  87. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
  88. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
  89. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
  90. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
  91. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
  92. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
  93. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
  94. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
  95. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
  96. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
  97. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
  98. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
  99. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
  100. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
  101. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
  102. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
  103. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
  104. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
  105. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
  106. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
  107. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
  108. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
  109. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
  110. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
  112. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
  113. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
  114. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
  115. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
  116. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
  117. data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
  118. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
  119. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
  120. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
  121. data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
  122. data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
  123. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
  124. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
  125. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
  126. data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
  127. data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
  128. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
  129. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
  130. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
  131. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
  132. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
  133. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
  134. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
  135. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
  136. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
  137. data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
  138. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
  139. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
  140. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
  141. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
  142. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
  143. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
  144. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
  145. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
  146. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
  147. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
  148. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
  149. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
  150. data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
  151. data/src/core/lib/channel/channel_trace.cc +2 -6
  152. data/src/core/lib/channel/channelz.cc +5 -15
  153. data/src/core/lib/gpr/log_linux.cc +6 -8
  154. data/src/core/lib/gpr/log_posix.cc +6 -8
  155. data/src/core/lib/gpr/string.cc +10 -9
  156. data/src/core/lib/gpr/string.h +4 -2
  157. data/src/core/lib/gprpp/global_config_env.cc +8 -6
  158. data/src/core/lib/http/httpcli.cc +13 -10
  159. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  160. data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
  161. data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
  162. data/src/core/lib/iomgr/error_cfstream.cc +9 -8
  163. data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
  164. data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
  165. data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
  166. data/src/core/lib/iomgr/ev_posix.cc +2 -0
  167. data/src/core/lib/iomgr/iomgr.cc +10 -0
  168. data/src/core/lib/iomgr/iomgr.h +10 -0
  169. data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
  170. data/src/core/lib/iomgr/port.h +1 -21
  171. data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
  172. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
  173. data/src/core/lib/iomgr/resource_quota.cc +34 -31
  174. data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
  175. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  176. data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
  177. data/src/core/lib/iomgr/socket_windows.cc +4 -5
  178. data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
  179. data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
  180. data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
  181. data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
  182. data/src/core/lib/iomgr/tcp_custom.cc +1 -1
  183. data/src/core/lib/iomgr/tcp_custom.h +1 -1
  184. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  185. data/src/core/lib/iomgr/tcp_server.h +7 -5
  186. data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
  187. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
  188. data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
  189. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
  190. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
  191. data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
  192. data/src/core/lib/iomgr/timer_generic.cc +13 -12
  193. data/src/core/lib/iomgr/udp_server.cc +24 -23
  194. data/src/core/lib/iomgr/udp_server.h +5 -2
  195. data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
  196. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  197. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
  198. data/src/core/lib/json/json_reader.cc +20 -21
  199. data/src/core/lib/security/credentials/credentials.h +5 -3
  200. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
  201. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
  202. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
  203. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
  204. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
  205. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
  206. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
  207. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
  208. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
  209. data/src/core/lib/security/security_connector/security_connector.cc +2 -0
  210. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  211. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
  212. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
  213. data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
  214. data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
  215. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
  216. data/src/core/lib/security/transport/auth_filters.h +0 -5
  217. data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
  218. data/src/core/lib/security/util/json_util.cc +12 -13
  219. data/src/core/lib/slice/slice.cc +38 -1
  220. data/src/core/lib/slice/slice_internal.h +1 -0
  221. data/src/core/lib/surface/call.cc +40 -41
  222. data/src/core/lib/surface/completion_queue.cc +271 -14
  223. data/src/core/lib/surface/completion_queue.h +8 -0
  224. data/src/core/lib/surface/init.cc +2 -0
  225. data/src/core/lib/surface/server.cc +565 -632
  226. data/src/core/lib/surface/server.h +34 -12
  227. data/src/core/lib/surface/version.cc +2 -2
  228. data/src/core/lib/transport/transport.h +6 -0
  229. data/src/core/lib/uri/uri_parser.cc +8 -15
  230. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
  232. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
  233. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
  234. data/src/core/tsi/ssl_transport_security.cc +108 -11
  235. data/src/core/tsi/ssl_transport_security.h +14 -2
  236. data/src/core/tsi/transport_security_interface.h +5 -0
  237. data/src/ruby/bin/math_services_pb.rb +4 -4
  238. data/src/ruby/ext/grpc/extconf.rb +5 -2
  239. data/src/ruby/ext/grpc/rb_call.c +3 -2
  240. data/src/ruby/ext/grpc/rb_call.h +4 -0
  241. data/src/ruby/ext/grpc/rb_call_credentials.c +57 -12
  242. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  243. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  244. data/src/ruby/lib/grpc/generic/client_stub.rb +1 -1
  245. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  246. data/src/ruby/lib/grpc/version.rb +1 -1
  247. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +2 -2
  248. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +5 -0
  249. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +28 -12
  250. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto +23 -0
  251. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +2 -0
  252. data/src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto +27 -0
  253. data/src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto +29 -0
  254. data/src/ruby/spec/pb/codegen/package_option_spec.rb +25 -1
  255. data/src/ruby/spec/support/services.rb +10 -4
  256. data/src/ruby/spec/user_agent_spec.rb +74 -0
  257. data/third_party/boringssl-with-bazel/err_data.c +89 -83
  258. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  259. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
  260. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
  262. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
  269. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
  270. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
  271. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
  272. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
  282. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
  283. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
  284. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
  285. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
  286. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
  288. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
  289. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
  303. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
  304. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
  305. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
  306. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
  307. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
  308. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
  309. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
  310. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
  311. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
  312. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
  313. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
  314. data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
  315. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
  316. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
  317. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
  318. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
  319. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
  320. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
  321. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
  322. data/third_party/re2/re2/bitmap256.h +117 -0
  323. data/third_party/re2/re2/bitstate.cc +385 -0
  324. data/third_party/re2/re2/compile.cc +1279 -0
  325. data/third_party/re2/re2/dfa.cc +2130 -0
  326. data/third_party/re2/re2/filtered_re2.cc +121 -0
  327. data/third_party/re2/re2/filtered_re2.h +109 -0
  328. data/third_party/re2/re2/mimics_pcre.cc +197 -0
  329. data/third_party/re2/re2/nfa.cc +713 -0
  330. data/third_party/re2/re2/onepass.cc +623 -0
  331. data/third_party/re2/re2/parse.cc +2464 -0
  332. data/third_party/re2/re2/perl_groups.cc +119 -0
  333. data/third_party/re2/re2/pod_array.h +55 -0
  334. data/third_party/re2/re2/prefilter.cc +710 -0
  335. data/third_party/re2/re2/prefilter.h +108 -0
  336. data/third_party/re2/re2/prefilter_tree.cc +407 -0
  337. data/third_party/re2/re2/prefilter_tree.h +139 -0
  338. data/third_party/re2/re2/prog.cc +988 -0
  339. data/third_party/re2/re2/prog.h +436 -0
  340. data/third_party/re2/re2/re2.cc +1362 -0
  341. data/third_party/re2/re2/re2.h +1002 -0
  342. data/third_party/re2/re2/regexp.cc +980 -0
  343. data/third_party/re2/re2/regexp.h +659 -0
  344. data/third_party/re2/re2/set.cc +154 -0
  345. data/third_party/re2/re2/set.h +80 -0
  346. data/third_party/re2/re2/simplify.cc +657 -0
  347. data/third_party/re2/re2/sparse_array.h +392 -0
  348. data/third_party/re2/re2/sparse_set.h +264 -0
  349. data/third_party/re2/re2/stringpiece.cc +65 -0
  350. data/third_party/re2/re2/stringpiece.h +210 -0
  351. data/third_party/re2/re2/tostring.cc +351 -0
  352. data/third_party/re2/re2/unicode_casefold.cc +582 -0
  353. data/third_party/re2/re2/unicode_casefold.h +78 -0
  354. data/third_party/re2/re2/unicode_groups.cc +6269 -0
  355. data/third_party/re2/re2/unicode_groups.h +67 -0
  356. data/third_party/re2/re2/walker-inl.h +246 -0
  357. data/third_party/re2/util/benchmark.h +156 -0
  358. data/third_party/re2/util/flags.h +26 -0
  359. data/third_party/re2/util/logging.h +109 -0
  360. data/third_party/re2/util/malloc_counter.h +19 -0
  361. data/third_party/re2/util/mix.h +41 -0
  362. data/third_party/re2/util/mutex.h +148 -0
  363. data/third_party/re2/util/pcre.cc +1025 -0
  364. data/third_party/re2/util/pcre.h +681 -0
  365. data/third_party/re2/util/rune.cc +260 -0
  366. data/third_party/re2/util/strutil.cc +149 -0
  367. data/third_party/re2/util/strutil.h +21 -0
  368. data/third_party/re2/util/test.h +50 -0
  369. data/third_party/re2/util/utf.h +44 -0
  370. data/third_party/re2/util/util.h +42 -0
  371. data/third_party/upb/upb/decode.c +467 -504
  372. data/third_party/upb/upb/encode.c +163 -121
  373. data/third_party/upb/upb/msg.c +130 -64
  374. data/third_party/upb/upb/msg.h +418 -14
  375. data/third_party/upb/upb/port_def.inc +35 -6
  376. data/third_party/upb/upb/port_undef.inc +8 -1
  377. data/third_party/upb/upb/table.c +53 -75
  378. data/third_party/upb/upb/table.int.h +11 -43
  379. data/third_party/upb/upb/upb.c +148 -124
  380. data/third_party/upb/upb/upb.h +65 -147
  381. data/third_party/upb/upb/upb.hpp +86 -0
  382. metadata +90 -30
  383. data/third_party/upb/upb/generated_util.h +0 -105
@@ -70,6 +70,7 @@ static bool upb_encode_reserve(upb_encstate *e, size_t bytes) {
70
70
 
71
71
  /* Writes the given bytes to the buffer, handling reserve/advance. */
72
72
  static bool upb_put_bytes(upb_encstate *e, const void *data, size_t len) {
73
+ if (len == 0) return true;
73
74
  CHK(upb_encode_reserve(e, len));
74
75
  memcpy(e->ptr, data, len);
75
76
  return true;
@@ -110,68 +111,150 @@ static bool upb_put_float(upb_encstate *e, float d) {
110
111
  return upb_put_fixed32(e, u32);
111
112
  }
112
113
 
113
- static uint32_t upb_readcase(const char *msg, const upb_msglayout_field *f) {
114
- uint32_t ret;
115
- uint32_t offset = ~f->presence;
116
- memcpy(&ret, msg + offset, sizeof(ret));
117
- return ret;
118
- }
119
-
120
- static bool upb_readhasbit(const char *msg, const upb_msglayout_field *f) {
121
- uint32_t hasbit = f->presence;
122
- UPB_ASSERT(f->presence > 0);
123
- return msg[hasbit / 8] & (1 << (hasbit % 8));
124
- }
125
-
126
114
  static bool upb_put_tag(upb_encstate *e, int field_number, int wire_type) {
127
115
  return upb_put_varint(e, (field_number << 3) | wire_type);
128
116
  }
129
117
 
130
118
  static bool upb_put_fixedarray(upb_encstate *e, const upb_array *arr,
131
- size_t size) {
132
- size_t bytes = arr->len * size;
133
- return upb_put_bytes(e, arr->data, bytes) && upb_put_varint(e, bytes);
119
+ size_t elem_size, uint32_t tag) {
120
+ size_t bytes = arr->len * elem_size;
121
+ const char* data = _upb_array_constptr(arr);
122
+ const char* ptr = data + bytes - elem_size;
123
+ if (tag) {
124
+ while (true) {
125
+ CHK(upb_put_bytes(e, ptr, elem_size) && upb_put_varint(e, tag));
126
+ if (ptr == data) break;
127
+ ptr -= elem_size;
128
+ }
129
+ return true;
130
+ } else {
131
+ return upb_put_bytes(e, data, bytes) && upb_put_varint(e, bytes);
132
+ }
134
133
  }
135
134
 
136
135
  bool upb_encode_message(upb_encstate *e, const char *msg,
137
136
  const upb_msglayout *m, size_t *size);
138
137
 
138
+ static bool upb_encode_scalarfield(upb_encstate *e, const void *_field_mem,
139
+ const upb_msglayout *m,
140
+ const upb_msglayout_field *f,
141
+ bool skip_zero_value) {
142
+ const char *field_mem = _field_mem;
143
+ #define CASE(ctype, type, wire_type, encodeval) do { \
144
+ ctype val = *(ctype*)field_mem; \
145
+ if (skip_zero_value && val == 0) { \
146
+ return true; \
147
+ } \
148
+ return upb_put_ ## type(e, encodeval) && \
149
+ upb_put_tag(e, f->number, wire_type); \
150
+ } while(0)
151
+
152
+ switch (f->descriptortype) {
153
+ case UPB_DESCRIPTOR_TYPE_DOUBLE:
154
+ CASE(double, double, UPB_WIRE_TYPE_64BIT, val);
155
+ case UPB_DESCRIPTOR_TYPE_FLOAT:
156
+ CASE(float, float, UPB_WIRE_TYPE_32BIT, val);
157
+ case UPB_DESCRIPTOR_TYPE_INT64:
158
+ case UPB_DESCRIPTOR_TYPE_UINT64:
159
+ CASE(uint64_t, varint, UPB_WIRE_TYPE_VARINT, val);
160
+ case UPB_DESCRIPTOR_TYPE_UINT32:
161
+ CASE(uint32_t, varint, UPB_WIRE_TYPE_VARINT, val);
162
+ case UPB_DESCRIPTOR_TYPE_INT32:
163
+ case UPB_DESCRIPTOR_TYPE_ENUM:
164
+ CASE(int32_t, varint, UPB_WIRE_TYPE_VARINT, (int64_t)val);
165
+ case UPB_DESCRIPTOR_TYPE_SFIXED64:
166
+ case UPB_DESCRIPTOR_TYPE_FIXED64:
167
+ CASE(uint64_t, fixed64, UPB_WIRE_TYPE_64BIT, val);
168
+ case UPB_DESCRIPTOR_TYPE_FIXED32:
169
+ case UPB_DESCRIPTOR_TYPE_SFIXED32:
170
+ CASE(uint32_t, fixed32, UPB_WIRE_TYPE_32BIT, val);
171
+ case UPB_DESCRIPTOR_TYPE_BOOL:
172
+ CASE(bool, varint, UPB_WIRE_TYPE_VARINT, val);
173
+ case UPB_DESCRIPTOR_TYPE_SINT32:
174
+ CASE(int32_t, varint, UPB_WIRE_TYPE_VARINT, upb_zzencode_32(val));
175
+ case UPB_DESCRIPTOR_TYPE_SINT64:
176
+ CASE(int64_t, varint, UPB_WIRE_TYPE_VARINT, upb_zzencode_64(val));
177
+ case UPB_DESCRIPTOR_TYPE_STRING:
178
+ case UPB_DESCRIPTOR_TYPE_BYTES: {
179
+ upb_strview view = *(upb_strview*)field_mem;
180
+ if (skip_zero_value && view.size == 0) {
181
+ return true;
182
+ }
183
+ return upb_put_bytes(e, view.data, view.size) &&
184
+ upb_put_varint(e, view.size) &&
185
+ upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED);
186
+ }
187
+ case UPB_DESCRIPTOR_TYPE_GROUP: {
188
+ size_t size;
189
+ void *submsg = *(void **)field_mem;
190
+ const upb_msglayout *subm = m->submsgs[f->submsg_index];
191
+ if (submsg == NULL) {
192
+ return true;
193
+ }
194
+ return upb_put_tag(e, f->number, UPB_WIRE_TYPE_END_GROUP) &&
195
+ upb_encode_message(e, submsg, subm, &size) &&
196
+ upb_put_tag(e, f->number, UPB_WIRE_TYPE_START_GROUP);
197
+ }
198
+ case UPB_DESCRIPTOR_TYPE_MESSAGE: {
199
+ size_t size;
200
+ void *submsg = *(void **)field_mem;
201
+ const upb_msglayout *subm = m->submsgs[f->submsg_index];
202
+ if (submsg == NULL) {
203
+ return true;
204
+ }
205
+ return upb_encode_message(e, submsg, subm, &size) &&
206
+ upb_put_varint(e, size) &&
207
+ upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED);
208
+ }
209
+ }
210
+ #undef CASE
211
+ UPB_UNREACHABLE();
212
+ }
213
+
139
214
  static bool upb_encode_array(upb_encstate *e, const char *field_mem,
140
215
  const upb_msglayout *m,
141
216
  const upb_msglayout_field *f) {
142
217
  const upb_array *arr = *(const upb_array**)field_mem;
218
+ bool packed = f->label == _UPB_LABEL_PACKED;
143
219
 
144
220
  if (arr == NULL || arr->len == 0) {
145
221
  return true;
146
222
  }
147
223
 
148
- #define VARINT_CASE(ctype, encode) { \
149
- ctype *start = arr->data; \
150
- ctype *ptr = start + arr->len; \
151
- size_t pre_len = e->limit - e->ptr; \
152
- do { \
153
- ptr--; \
154
- CHK(upb_put_varint(e, encode)); \
155
- } while (ptr != start); \
156
- CHK(upb_put_varint(e, e->limit - e->ptr - pre_len)); \
157
- } \
158
- break; \
159
- do { ; } while(0)
224
+ #define VARINT_CASE(ctype, encode) \
225
+ { \
226
+ const ctype *start = _upb_array_constptr(arr); \
227
+ const ctype *ptr = start + arr->len; \
228
+ size_t pre_len = e->limit - e->ptr; \
229
+ uint32_t tag = packed ? 0 : (f->number << 3) | UPB_WIRE_TYPE_VARINT; \
230
+ do { \
231
+ ptr--; \
232
+ CHK(upb_put_varint(e, encode)); \
233
+ if (tag) CHK(upb_put_varint(e, tag)); \
234
+ } while (ptr != start); \
235
+ if (!tag) CHK(upb_put_varint(e, e->limit - e->ptr - pre_len)); \
236
+ } \
237
+ break; \
238
+ do { \
239
+ ; \
240
+ } while (0)
241
+
242
+ #define TAG(wire_type) (packed ? 0 : (f->number << 3 | wire_type))
160
243
 
161
244
  switch (f->descriptortype) {
162
245
  case UPB_DESCRIPTOR_TYPE_DOUBLE:
163
- CHK(upb_put_fixedarray(e, arr, sizeof(double)));
246
+ CHK(upb_put_fixedarray(e, arr, sizeof(double), TAG(UPB_WIRE_TYPE_64BIT)));
164
247
  break;
165
248
  case UPB_DESCRIPTOR_TYPE_FLOAT:
166
- CHK(upb_put_fixedarray(e, arr, sizeof(float)));
249
+ CHK(upb_put_fixedarray(e, arr, sizeof(float), TAG(UPB_WIRE_TYPE_32BIT)));
167
250
  break;
168
251
  case UPB_DESCRIPTOR_TYPE_SFIXED64:
169
252
  case UPB_DESCRIPTOR_TYPE_FIXED64:
170
- CHK(upb_put_fixedarray(e, arr, sizeof(uint64_t)));
253
+ CHK(upb_put_fixedarray(e, arr, sizeof(uint64_t), TAG(UPB_WIRE_TYPE_64BIT)));
171
254
  break;
172
255
  case UPB_DESCRIPTOR_TYPE_FIXED32:
173
256
  case UPB_DESCRIPTOR_TYPE_SFIXED32:
174
- CHK(upb_put_fixedarray(e, arr, sizeof(uint32_t)));
257
+ CHK(upb_put_fixedarray(e, arr, sizeof(uint32_t), TAG(UPB_WIRE_TYPE_32BIT)));
175
258
  break;
176
259
  case UPB_DESCRIPTOR_TYPE_INT64:
177
260
  case UPB_DESCRIPTOR_TYPE_UINT64:
@@ -189,8 +272,8 @@ do { ; } while(0)
189
272
  VARINT_CASE(int64_t, upb_zzencode_64(*ptr));
190
273
  case UPB_DESCRIPTOR_TYPE_STRING:
191
274
  case UPB_DESCRIPTOR_TYPE_BYTES: {
192
- upb_strview *start = arr->data;
193
- upb_strview *ptr = start + arr->len;
275
+ const upb_strview *start = _upb_array_constptr(arr);
276
+ const upb_strview *ptr = start + arr->len;
194
277
  do {
195
278
  ptr--;
196
279
  CHK(upb_put_bytes(e, ptr->data, ptr->size) &&
@@ -200,8 +283,8 @@ do { ; } while(0)
200
283
  return true;
201
284
  }
202
285
  case UPB_DESCRIPTOR_TYPE_GROUP: {
203
- void **start = arr->data;
204
- void **ptr = start + arr->len;
286
+ const void *const*start = _upb_array_constptr(arr);
287
+ const void *const*ptr = start + arr->len;
205
288
  const upb_msglayout *subm = m->submsgs[f->submsg_index];
206
289
  do {
207
290
  size_t size;
@@ -213,8 +296,8 @@ do { ; } while(0)
213
296
  return true;
214
297
  }
215
298
  case UPB_DESCRIPTOR_TYPE_MESSAGE: {
216
- void **start = arr->data;
217
- void **ptr = start + arr->len;
299
+ const void *const*start = _upb_array_constptr(arr);
300
+ const void *const*ptr = start + arr->len;
218
301
  const upb_msglayout *subm = m->submsgs[f->submsg_index];
219
302
  do {
220
303
  size_t size;
@@ -228,87 +311,44 @@ do { ; } while(0)
228
311
  }
229
312
  #undef VARINT_CASE
230
313
 
231
- /* We encode all primitive arrays as packed, regardless of what was specified
232
- * in the .proto file. Could special case 1-sized arrays. */
233
- CHK(upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED));
314
+ if (packed) {
315
+ CHK(upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED));
316
+ }
234
317
  return true;
235
318
  }
236
319
 
237
- static bool upb_encode_scalarfield(upb_encstate *e, const char *field_mem,
238
- const upb_msglayout *m,
239
- const upb_msglayout_field *f,
240
- bool skip_zero_value) {
241
- #define CASE(ctype, type, wire_type, encodeval) do { \
242
- ctype val = *(ctype*)field_mem; \
243
- if (skip_zero_value && val == 0) { \
244
- return true; \
245
- } \
246
- return upb_put_ ## type(e, encodeval) && \
247
- upb_put_tag(e, f->number, wire_type); \
248
- } while(0)
320
+ static bool upb_encode_map(upb_encstate *e, const char *field_mem,
321
+ const upb_msglayout *m,
322
+ const upb_msglayout_field *f) {
323
+ const upb_map *map = *(const upb_map**)field_mem;
324
+ const upb_msglayout *entry = m->submsgs[f->submsg_index];
325
+ const upb_msglayout_field *key_field = &entry->fields[0];
326
+ const upb_msglayout_field *val_field = &entry->fields[1];
327
+ upb_strtable_iter i;
328
+ if (map == NULL) {
329
+ return true;
330
+ }
249
331
 
250
- switch (f->descriptortype) {
251
- case UPB_DESCRIPTOR_TYPE_DOUBLE:
252
- CASE(double, double, UPB_WIRE_TYPE_64BIT, val);
253
- case UPB_DESCRIPTOR_TYPE_FLOAT:
254
- CASE(float, float, UPB_WIRE_TYPE_32BIT, val);
255
- case UPB_DESCRIPTOR_TYPE_INT64:
256
- case UPB_DESCRIPTOR_TYPE_UINT64:
257
- CASE(uint64_t, varint, UPB_WIRE_TYPE_VARINT, val);
258
- case UPB_DESCRIPTOR_TYPE_UINT32:
259
- CASE(uint32_t, varint, UPB_WIRE_TYPE_VARINT, val);
260
- case UPB_DESCRIPTOR_TYPE_INT32:
261
- case UPB_DESCRIPTOR_TYPE_ENUM:
262
- CASE(int32_t, varint, UPB_WIRE_TYPE_VARINT, (int64_t)val);
263
- case UPB_DESCRIPTOR_TYPE_SFIXED64:
264
- case UPB_DESCRIPTOR_TYPE_FIXED64:
265
- CASE(uint64_t, fixed64, UPB_WIRE_TYPE_64BIT, val);
266
- case UPB_DESCRIPTOR_TYPE_FIXED32:
267
- case UPB_DESCRIPTOR_TYPE_SFIXED32:
268
- CASE(uint32_t, fixed32, UPB_WIRE_TYPE_32BIT, val);
269
- case UPB_DESCRIPTOR_TYPE_BOOL:
270
- CASE(bool, varint, UPB_WIRE_TYPE_VARINT, val);
271
- case UPB_DESCRIPTOR_TYPE_SINT32:
272
- CASE(int32_t, varint, UPB_WIRE_TYPE_VARINT, upb_zzencode_32(val));
273
- case UPB_DESCRIPTOR_TYPE_SINT64:
274
- CASE(int64_t, varint, UPB_WIRE_TYPE_VARINT, upb_zzencode_64(val));
275
- case UPB_DESCRIPTOR_TYPE_STRING:
276
- case UPB_DESCRIPTOR_TYPE_BYTES: {
277
- upb_strview view = *(upb_strview*)field_mem;
278
- if (skip_zero_value && view.size == 0) {
279
- return true;
280
- }
281
- return upb_put_bytes(e, view.data, view.size) &&
282
- upb_put_varint(e, view.size) &&
283
- upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED);
284
- }
285
- case UPB_DESCRIPTOR_TYPE_GROUP: {
286
- size_t size;
287
- void *submsg = *(void **)field_mem;
288
- const upb_msglayout *subm = m->submsgs[f->submsg_index];
289
- if (submsg == NULL) {
290
- return true;
291
- }
292
- return upb_put_tag(e, f->number, UPB_WIRE_TYPE_END_GROUP) &&
293
- upb_encode_message(e, submsg, subm, &size) &&
294
- upb_put_tag(e, f->number, UPB_WIRE_TYPE_START_GROUP);
295
- }
296
- case UPB_DESCRIPTOR_TYPE_MESSAGE: {
297
- size_t size;
298
- void *submsg = *(void **)field_mem;
299
- const upb_msglayout *subm = m->submsgs[f->submsg_index];
300
- if (submsg == NULL) {
301
- return true;
302
- }
303
- return upb_encode_message(e, submsg, subm, &size) &&
304
- upb_put_varint(e, size) &&
305
- upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED);
306
- }
332
+ upb_strtable_begin(&i, &map->table);
333
+ for(; !upb_strtable_done(&i); upb_strtable_next(&i)) {
334
+ size_t pre_len = e->limit - e->ptr;
335
+ size_t size;
336
+ upb_strview key = upb_strtable_iter_key(&i);
337
+ const upb_value val = upb_strtable_iter_value(&i);
338
+ upb_map_entry ent;
339
+ _upb_map_fromkey(key, &ent.k, map->key_size);
340
+ _upb_map_fromvalue(val, &ent.v, map->val_size);
341
+ CHK(upb_encode_scalarfield(e, &ent.v, entry, val_field, false));
342
+ CHK(upb_encode_scalarfield(e, &ent.k, entry, key_field, false));
343
+ size = (e->limit - e->ptr) - pre_len;
344
+ CHK(upb_put_varint(e, size));
345
+ CHK(upb_put_tag(e, f->number, UPB_WIRE_TYPE_DELIMITED));
307
346
  }
308
- #undef CASE
309
- UPB_UNREACHABLE();
347
+
348
+ return true;
310
349
  }
311
350
 
351
+
312
352
  bool upb_encode_message(upb_encstate *e, const char *msg,
313
353
  const upb_msglayout *m, size_t *size) {
314
354
  int i;
@@ -316,11 +356,19 @@ bool upb_encode_message(upb_encstate *e, const char *msg,
316
356
  const char *unknown;
317
357
  size_t unknown_size;
318
358
 
359
+ unknown = upb_msg_getunknown(msg, &unknown_size);
360
+
361
+ if (unknown) {
362
+ upb_put_bytes(e, unknown, unknown_size);
363
+ }
364
+
319
365
  for (i = m->field_count - 1; i >= 0; i--) {
320
366
  const upb_msglayout_field *f = &m->fields[i];
321
367
 
322
- if (f->label == UPB_LABEL_REPEATED) {
368
+ if (_upb_isrepeated(f)) {
323
369
  CHK(upb_encode_array(e, msg + f->offset, m, f));
370
+ } else if (f->label == _UPB_LABEL_MAP) {
371
+ CHK(upb_encode_map(e, msg + f->offset, m, f));
324
372
  } else {
325
373
  bool skip_empty = false;
326
374
  if (f->presence == 0) {
@@ -328,12 +376,12 @@ bool upb_encode_message(upb_encstate *e, const char *msg,
328
376
  skip_empty = true;
329
377
  } else if (f->presence > 0) {
330
378
  /* Proto2 presence: hasbit. */
331
- if (!upb_readhasbit(msg, f)) {
379
+ if (!_upb_hasbit_field(msg, f)) {
332
380
  continue;
333
381
  }
334
382
  } else {
335
383
  /* Field is in a oneof. */
336
- if (upb_readcase(msg, f) != f->number) {
384
+ if (_upb_getoneofcase_field(msg, f) != f->number) {
337
385
  continue;
338
386
  }
339
387
  }
@@ -341,12 +389,6 @@ bool upb_encode_message(upb_encstate *e, const char *msg,
341
389
  }
342
390
  }
343
391
 
344
- unknown = upb_msg_getunknown(msg, &unknown_size);
345
-
346
- if (unknown) {
347
- upb_put_bytes(e, unknown, unknown_size);
348
- }
349
-
350
392
  *size = (e->limit - e->ptr) - pre_len;
351
393
  return true;
352
394
  }
@@ -5,24 +5,27 @@
5
5
 
6
6
  #include "upb/port_def.inc"
7
7
 
8
- #define VOIDPTR_AT(msg, ofs) (void*)((char*)msg + (int)ofs)
9
-
10
- /* Internal members of a upb_msg. We can change this without breaking binary
11
- * compatibility. We put these before the user's data. The user's upb_msg*
12
- * points after the upb_msg_internal. */
13
-
14
- /* Used when a message is not extendable. */
15
- typedef struct {
16
- char *unknown;
17
- size_t unknown_len;
18
- size_t unknown_size;
19
- } upb_msg_internal;
20
-
21
- /* Used when a message is extendable. */
22
- typedef struct {
23
- upb_inttable *extdict;
24
- upb_msg_internal base;
25
- } upb_msg_internal_withext;
8
+ /** upb_msg *******************************************************************/
9
+
10
+ static const char _upb_fieldtype_to_sizelg2[12] = {
11
+ 0,
12
+ 0, /* UPB_TYPE_BOOL */
13
+ 2, /* UPB_TYPE_FLOAT */
14
+ 2, /* UPB_TYPE_INT32 */
15
+ 2, /* UPB_TYPE_UINT32 */
16
+ 2, /* UPB_TYPE_ENUM */
17
+ UPB_SIZE(2, 3), /* UPB_TYPE_MESSAGE */
18
+ 3, /* UPB_TYPE_DOUBLE */
19
+ 3, /* UPB_TYPE_INT64 */
20
+ 3, /* UPB_TYPE_UINT64 */
21
+ UPB_SIZE(3, 4), /* UPB_TYPE_STRING */
22
+ UPB_SIZE(3, 4), /* UPB_TYPE_BYTES */
23
+ };
24
+
25
+ static uintptr_t tag_arrptr(void* ptr, int elem_size_lg2) {
26
+ UPB_ASSERT(elem_size_lg2 <= 4);
27
+ return (uintptr_t)ptr | elem_size_lg2;
28
+ }
26
29
 
27
30
  static int upb_msg_internalsize(const upb_msglayout *l) {
28
31
  return sizeof(upb_msg_internal) - l->extendable * sizeof(void *);
@@ -32,80 +35,143 @@ static size_t upb_msg_sizeof(const upb_msglayout *l) {
32
35
  return l->size + upb_msg_internalsize(l);
33
36
  }
34
37
 
35
- static upb_msg_internal *upb_msg_getinternal(upb_msg *msg) {
36
- return VOIDPTR_AT(msg, -sizeof(upb_msg_internal));
38
+ static const upb_msg_internal *upb_msg_getinternal_const(const upb_msg *msg) {
39
+ ptrdiff_t size = sizeof(upb_msg_internal);
40
+ return UPB_PTR_AT(msg, -size, upb_msg_internal);
37
41
  }
38
42
 
39
- static const upb_msg_internal *upb_msg_getinternal_const(const upb_msg *msg) {
40
- return VOIDPTR_AT(msg, -sizeof(upb_msg_internal));
43
+ static upb_msg_internal *upb_msg_getinternal(upb_msg *msg) {
44
+ return (upb_msg_internal*)upb_msg_getinternal_const(msg);
41
45
  }
42
46
 
43
- static upb_msg_internal_withext *upb_msg_getinternalwithext(
44
- upb_msg *msg, const upb_msglayout *l) {
45
- UPB_ASSERT(l->extendable);
46
- return VOIDPTR_AT(msg, -sizeof(upb_msg_internal_withext));
47
+ void _upb_msg_clear(upb_msg *msg, const upb_msglayout *l) {
48
+ ptrdiff_t internal = upb_msg_internalsize(l);
49
+ void *mem = UPB_PTR_AT(msg, -internal, char);
50
+ memset(mem, 0, l->size + internal);
47
51
  }
48
52
 
49
- upb_msg *upb_msg_new(const upb_msglayout *l, upb_arena *a) {
50
- upb_alloc *alloc = upb_arena_alloc(a);
51
- void *mem = upb_malloc(alloc, upb_msg_sizeof(l));
52
- upb_msg_internal *in;
53
+ upb_msg *_upb_msg_new(const upb_msglayout *l, upb_arena *a) {
54
+ void *mem = upb_arena_malloc(a, upb_msg_sizeof(l));
53
55
  upb_msg *msg;
54
56
 
55
57
  if (!mem) {
56
58
  return NULL;
57
59
  }
58
60
 
59
- msg = VOIDPTR_AT(mem, upb_msg_internalsize(l));
60
-
61
- /* Initialize normal members. */
62
- memset(msg, 0, l->size);
63
-
64
- /* Initialize internal members. */
65
- in = upb_msg_getinternal(msg);
66
- in->unknown = NULL;
67
- in->unknown_len = 0;
68
- in->unknown_size = 0;
69
-
70
- if (l->extendable) {
71
- upb_msg_getinternalwithext(msg, l)->extdict = NULL;
72
- }
73
-
61
+ msg = UPB_PTR_AT(mem, upb_msg_internalsize(l), upb_msg);
62
+ _upb_msg_clear(msg, l);
74
63
  return msg;
75
64
  }
76
65
 
77
- upb_array *upb_array_new(upb_arena *a) {
78
- upb_array *ret = upb_arena_malloc(a, sizeof(upb_array));
79
-
80
- if (!ret) {
81
- return NULL;
82
- }
83
-
84
- ret->data = NULL;
85
- ret->len = 0;
86
- ret->size = 0;
87
-
88
- return ret;
89
- }
90
-
91
- void upb_msg_addunknown(upb_msg *msg, const char *data, size_t len,
92
- upb_arena *arena) {
66
+ bool _upb_msg_addunknown(upb_msg *msg, const char *data, size_t len,
67
+ upb_arena *arena) {
93
68
  upb_msg_internal *in = upb_msg_getinternal(msg);
94
69
  if (len > in->unknown_size - in->unknown_len) {
95
70
  upb_alloc *alloc = upb_arena_alloc(arena);
96
71
  size_t need = in->unknown_size + len;
97
72
  size_t newsize = UPB_MAX(in->unknown_size * 2, need);
98
- in->unknown = upb_realloc(alloc, in->unknown, in->unknown_size, newsize);
73
+ void *mem = upb_realloc(alloc, in->unknown, in->unknown_size, newsize);
74
+ if (!mem) return false;
75
+ in->unknown = mem;
99
76
  in->unknown_size = newsize;
100
77
  }
101
78
  memcpy(in->unknown + in->unknown_len, data, len);
102
79
  in->unknown_len += len;
80
+ return true;
81
+ }
82
+
83
+ void _upb_msg_discardunknown_shallow(upb_msg *msg) {
84
+ upb_msg_internal *in = upb_msg_getinternal(msg);
85
+ in->unknown_len = 0;
103
86
  }
104
87
 
105
88
  const char *upb_msg_getunknown(const upb_msg *msg, size_t *len) {
106
- const upb_msg_internal* in = upb_msg_getinternal_const(msg);
89
+ const upb_msg_internal *in = upb_msg_getinternal_const(msg);
107
90
  *len = in->unknown_len;
108
91
  return in->unknown;
109
92
  }
110
93
 
111
- #undef VOIDPTR_AT
94
+ /** upb_array *****************************************************************/
95
+
96
+ upb_array *_upb_array_new(upb_arena *a, upb_fieldtype_t type) {
97
+ upb_array *arr = upb_arena_malloc(a, sizeof(upb_array));
98
+
99
+ if (!arr) {
100
+ return NULL;
101
+ }
102
+
103
+ arr->data = tag_arrptr(NULL, _upb_fieldtype_to_sizelg2[type]);
104
+ arr->len = 0;
105
+ arr->size = 0;
106
+
107
+ return arr;
108
+ }
109
+
110
+ bool _upb_array_realloc(upb_array *arr, size_t min_size, upb_arena *arena) {
111
+ size_t new_size = UPB_MAX(arr->size, 4);
112
+ int elem_size_lg2 = arr->data & 7;
113
+ size_t old_bytes = arr->size << elem_size_lg2;
114
+ size_t new_bytes;
115
+ void* ptr = _upb_array_ptr(arr);
116
+
117
+ /* Log2 ceiling of size. */
118
+ while (new_size < min_size) new_size *= 2;
119
+
120
+ new_bytes = new_size << elem_size_lg2;
121
+ ptr = upb_arena_realloc(arena, ptr, old_bytes, new_bytes);
122
+
123
+ if (!ptr) {
124
+ return false;
125
+ }
126
+
127
+ arr->data = tag_arrptr(ptr, elem_size_lg2);
128
+ arr->size = new_size;
129
+ return true;
130
+ }
131
+
132
+ static upb_array *getorcreate_array(upb_array **arr_ptr, upb_fieldtype_t type,
133
+ upb_arena *arena) {
134
+ upb_array *arr = *arr_ptr;
135
+ if (!arr) {
136
+ arr = _upb_array_new(arena, type);
137
+ if (!arr) return NULL;
138
+ *arr_ptr = arr;
139
+ }
140
+ return arr;
141
+ }
142
+
143
+ void *_upb_array_resize_fallback(upb_array **arr_ptr, size_t size,
144
+ upb_fieldtype_t type, upb_arena *arena) {
145
+ upb_array *arr = getorcreate_array(arr_ptr, type, arena);
146
+ return arr && _upb_array_resize(arr, size, arena) ? _upb_array_ptr(arr) : NULL;
147
+ }
148
+
149
+ bool _upb_array_append_fallback(upb_array **arr_ptr, const void *value,
150
+ upb_fieldtype_t type, upb_arena *arena) {
151
+ upb_array *arr = getorcreate_array(arr_ptr, type, arena);
152
+ size_t elem = arr->len;
153
+ int lg2 = _upb_fieldtype_to_sizelg2[type];
154
+ char *data;
155
+
156
+ if (!arr || !_upb_array_resize(arr, elem + 1, arena)) return false;
157
+
158
+ data = _upb_array_ptr(arr);
159
+ memcpy(data + (elem << lg2), value, 1 << lg2);
160
+ return true;
161
+ }
162
+
163
+ /** upb_map *******************************************************************/
164
+
165
+ upb_map *_upb_map_new(upb_arena *a, size_t key_size, size_t value_size) {
166
+ upb_map *map = upb_arena_malloc(a, sizeof(upb_map));
167
+
168
+ if (!map) {
169
+ return NULL;
170
+ }
171
+
172
+ upb_strtable_init2(&map->table, UPB_CTYPE_INT32, upb_arena_alloc(a));
173
+ map->key_size = key_size;
174
+ map->val_size = value_size;
175
+
176
+ return map;
177
+ }