grpc 1.81.0 → 1.82.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (863) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +12 -9
  3. data/include/grpc/grpc.h +6 -7
  4. data/include/grpc/impl/channel_arg_names.h +3 -1
  5. data/src/core/call/call_filters.h +2 -2
  6. data/src/core/call/client_call.cc +1 -1
  7. data/src/core/call/interception_chain.h +6 -9
  8. data/src/core/call/metadata.h +1 -1
  9. data/src/core/call/metadata_batch.cc +1 -1
  10. data/src/core/call/metadata_batch.h +17 -1
  11. data/src/core/call/parsed_metadata.h +7 -2
  12. data/src/core/call/server_call.cc +4 -2
  13. data/src/core/call/server_call.h +9 -2
  14. data/src/core/call/status_util.cc +0 -4
  15. data/src/core/call/status_util.h +0 -3
  16. data/src/core/channelz/channel_trace.cc +3 -1
  17. data/src/core/client_channel/backup_poller.cc +1 -1
  18. data/src/core/client_channel/client_channel.cc +6 -14
  19. data/src/core/client_channel/client_channel.h +2 -2
  20. data/src/core/client_channel/client_channel_filter.cc +8 -17
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_plugin.cc +1 -1
  23. data/src/core/client_channel/config_selector.h +2 -7
  24. data/src/core/client_channel/dynamic_filters.cc +4 -7
  25. data/src/core/client_channel/dynamic_filters.h +1 -3
  26. data/src/core/client_channel/retry_filter.cc +2 -25
  27. data/src/core/client_channel/retry_filter.h +3 -7
  28. data/src/core/client_channel/retry_filter_legacy_call_data.cc +1 -1
  29. data/src/core/client_channel/retry_filter_legacy_call_data.h +2 -2
  30. data/src/core/client_channel/retry_interceptor.cc +7 -35
  31. data/src/core/client_channel/retry_interceptor.h +11 -14
  32. data/src/core/client_channel/retry_service_config.cc +0 -2
  33. data/src/core/client_channel/retry_service_config.h +0 -2
  34. data/src/core/client_channel/retry_throttle.cc +19 -7
  35. data/src/core/client_channel/retry_throttle.h +24 -7
  36. data/src/core/client_channel/subchannel.cc +1 -1
  37. data/src/core/credentials/call/external/external_account_credentials.cc +125 -12
  38. data/src/core/credentials/call/external/external_account_credentials.h +6 -1
  39. data/src/core/credentials/call/jwt/jwt_credentials.cc +11 -1
  40. data/src/core/credentials/call/jwt/jwt_credentials.h +3 -0
  41. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +64 -11
  42. data/src/core/credentials/call/oauth2/oauth2_credentials.h +0 -1
  43. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +411 -0
  44. data/src/core/credentials/call/regional_access_boundary_fetcher.h +158 -0
  45. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +1 -1
  46. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +7 -1
  47. data/src/core/credentials/transport/insecure/insecure_security_connector.h +1 -1
  48. data/src/core/credentials/transport/local/local_security_connector.cc +1 -1
  49. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +6 -0
  50. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +28 -66
  51. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -8
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +24 -58
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +24 -19
  54. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -81
  55. data/src/core/ext/filters/message_size/message_size_filter.h +1 -50
  56. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +13 -56
  57. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -14
  58. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  59. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +175 -51
  60. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -1
  61. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +73 -6
  62. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  63. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -1
  64. data/src/core/ext/transport/chttp2/transport/flow_control.h +11 -0
  65. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +2 -4
  66. data/src/core/ext/transport/chttp2/transport/frame.cc +63 -13
  67. data/src/core/ext/transport/chttp2/transport/frame.h +45 -10
  68. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +11 -3
  70. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -1
  71. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  72. data/src/core/ext/transport/chttp2/transport/header_assembler.h +54 -22
  73. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +53 -5
  74. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +22 -0
  75. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +20 -0
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +33 -1
  77. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  78. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +118 -157
  79. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +6 -13
  80. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +2187 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +748 -0
  82. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -4
  83. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +0 -2
  84. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +50 -17
  85. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +13 -15
  86. data/src/core/ext/transport/chttp2/transport/http2_transport.h +16 -48
  87. data/src/core/ext/transport/chttp2/transport/internal.h +14 -0
  88. data/src/core/ext/transport/chttp2/transport/message_assembler.h +1 -2
  89. data/src/core/ext/transport/chttp2/transport/parsing.cc +82 -24
  90. data/src/core/ext/transport/chttp2/transport/read_context.h +452 -0
  91. data/src/core/ext/transport/chttp2/transport/security_frame.h +12 -3
  92. data/src/core/ext/transport/chttp2/transport/stream.h +25 -26
  93. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +6 -4
  94. data/src/core/ext/transport/chttp2/transport/write_cycle.h +9 -1
  95. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +16 -2
  96. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +621 -432
  97. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +264 -166
  98. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +0 -13
  99. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +708 -497
  100. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +294 -176
  101. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +0 -15
  102. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +262 -181
  103. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +84 -58
  104. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h +0 -5
  105. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +254 -190
  106. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +107 -53
  107. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.h +0 -4
  108. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +271 -190
  109. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +88 -64
  110. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.h +0 -5
  111. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +1035 -730
  112. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +384 -260
  113. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.h +0 -19
  114. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +87 -56
  115. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +26 -16
  116. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.h +0 -2
  117. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +105 -71
  118. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +30 -22
  119. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.h +0 -2
  120. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +31 -29
  121. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +19 -7
  122. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.h +0 -1
  123. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +25 -23
  124. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +15 -7
  125. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.h +0 -1
  126. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +25 -23
  127. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +15 -7
  128. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.h +0 -1
  129. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +201 -165
  130. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +79 -31
  131. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.h +0 -2
  132. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +29 -26
  133. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +17 -11
  134. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.h +0 -1
  135. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +46 -29
  136. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +37 -19
  137. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h +4 -4
  138. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +34 -27
  139. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +34 -13
  140. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.h +1 -2
  141. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +617 -452
  142. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +221 -163
  143. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.h +0 -16
  144. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1339 -970
  145. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +484 -324
  146. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +0 -23
  147. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +181 -135
  148. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +59 -43
  149. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.h +0 -3
  150. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1353 -1028
  151. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +535 -361
  152. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.h +0 -25
  153. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +37 -33
  154. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +19 -13
  155. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.h +0 -1
  156. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +234 -196
  157. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +77 -57
  158. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.h +0 -1
  159. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +695 -502
  160. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +246 -186
  161. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.h +0 -15
  162. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +140 -116
  163. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +53 -43
  164. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +0 -3
  165. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +363 -269
  166. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +131 -89
  167. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.h +0 -8
  168. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +35 -31
  169. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +15 -13
  170. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.h +0 -1
  171. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +1073 -769
  172. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +515 -293
  173. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +0 -30
  174. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +25 -23
  175. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +15 -7
  176. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +0 -1
  177. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +375 -267
  178. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +142 -86
  179. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.h +0 -7
  180. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +32 -27
  181. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +13 -11
  182. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.h +0 -1
  183. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +29 -26
  184. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +17 -11
  185. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.h +0 -1
  186. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +87 -56
  187. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +26 -16
  188. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.h +0 -2
  189. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +634 -468
  190. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +255 -161
  191. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.h +0 -14
  192. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -474
  193. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +228 -130
  194. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.h +0 -9
  195. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +56 -40
  196. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +15 -13
  197. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +0 -1
  198. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +34 -29
  199. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +19 -11
  200. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.h +0 -1
  201. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +811 -635
  202. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +347 -221
  203. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.h +0 -16
  204. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +174 -118
  205. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +62 -38
  206. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +0 -4
  207. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +78 -57
  208. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +28 -18
  209. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.h +0 -2
  210. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +37 -33
  211. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +22 -14
  212. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +0 -1
  213. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +159 -119
  214. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +47 -35
  215. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +0 -5
  216. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +101 -76
  217. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +41 -23
  218. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +0 -2
  219. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +35 -31
  220. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +15 -13
  221. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.h +0 -1
  222. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +189 -127
  223. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +79 -49
  224. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.h +0 -4
  225. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +378 -283
  226. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +156 -98
  227. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +0 -8
  228. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +354 -255
  229. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +125 -69
  230. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.h +0 -6
  231. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +27 -24
  232. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +13 -11
  233. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.h +0 -1
  234. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +611 -451
  235. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +159 -119
  236. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +0 -11
  237. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +468 -321
  238. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +157 -99
  239. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -6
  240. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +146 -119
  241. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +55 -35
  242. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.h +0 -1
  243. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +61 -51
  244. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +16 -16
  245. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.h +0 -2
  246. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +43 -39
  247. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +25 -13
  248. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.h +0 -1
  249. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +341 -247
  250. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +130 -84
  251. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.h +0 -8
  252. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +452 -313
  253. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +144 -100
  254. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.h +0 -10
  255. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +666 -493
  256. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +251 -181
  257. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +0 -12
  258. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +327 -197
  259. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +92 -48
  260. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.h +0 -3
  261. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3583 -2532
  262. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +1340 -816
  263. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +0 -60
  264. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +111 -82
  265. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +48 -28
  266. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.h +0 -3
  267. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +548 -410
  268. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +214 -148
  269. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.h +0 -12
  270. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +59 -50
  271. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +30 -20
  272. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.h +0 -2
  273. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +29 -26
  274. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +17 -11
  275. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.h +0 -1
  276. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +60 -49
  277. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +28 -20
  278. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.h +0 -2
  279. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +50 -36
  280. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +19 -11
  281. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.h +0 -1
  282. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +82 -63
  283. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +27 -19
  284. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.h +0 -1
  285. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +27 -24
  286. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +13 -11
  287. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.h +0 -1
  288. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +70 -58
  289. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +32 -22
  290. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.h +0 -2
  291. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +2 -5
  292. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +1 -1
  293. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +73 -62
  294. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +39 -25
  295. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.h +0 -2
  296. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +49 -45
  297. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +33 -13
  298. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.h +0 -1
  299. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +771 -588
  300. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +383 -185
  301. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.h +0 -16
  302. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +66 -47
  303. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +31 -17
  304. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +0 -2
  305. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb.h +69 -58
  306. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.c +27 -23
  307. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.h +0 -2
  308. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +151 -119
  309. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +45 -39
  310. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.h +0 -5
  311. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb.h +19 -17
  312. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.c +1 -3
  313. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.h +0 -1
  314. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb.h +144 -109
  315. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.c +46 -38
  316. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.h +0 -4
  317. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +184 -139
  318. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +65 -35
  319. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.h +0 -3
  320. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +129 -106
  321. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +69 -41
  322. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.h +0 -4
  323. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +83 -71
  324. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +40 -26
  325. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.h +0 -2
  326. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +148 -101
  327. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +45 -27
  328. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.h +0 -2
  329. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +62 -51
  330. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +35 -21
  331. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.h +0 -2
  332. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1362 -1024
  333. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +508 -336
  334. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +0 -22
  335. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +21 -19
  336. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +13 -7
  337. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +0 -1
  338. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +35 -31
  339. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +15 -13
  340. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +0 -1
  341. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +27 -24
  342. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +13 -11
  343. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +0 -1
  344. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +27 -24
  345. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +13 -11
  346. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.h +0 -1
  347. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +94 -74
  348. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +35 -23
  349. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.h +0 -1
  350. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +231 -179
  351. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +88 -66
  352. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +0 -6
  353. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +21 -19
  354. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +13 -7
  355. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.h +0 -1
  356. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +63 -56
  357. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +31 -19
  358. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.h +0 -1
  359. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +27 -24
  360. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +13 -11
  361. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.h +0 -1
  362. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +27 -24
  363. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +13 -11
  364. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.h +0 -1
  365. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -5
  366. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.c +1 -1
  367. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +538 -364
  368. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +157 -95
  369. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.h +0 -8
  370. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -110
  371. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +69 -49
  372. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +0 -4
  373. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +517 -389
  374. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +182 -116
  375. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h +0 -7
  376. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +84 -62
  377. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +30 -22
  378. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h +0 -2
  379. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +340 -256
  380. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +92 -82
  381. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +0 -5
  382. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +19 -17
  383. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -3
  384. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h +0 -1
  385. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +857 -566
  386. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +288 -182
  387. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +0 -15
  388. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +105 -72
  389. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +36 -22
  390. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.h +0 -2
  391. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +312 -226
  392. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +132 -78
  393. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.h +0 -5
  394. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +82 -61
  395. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -19
  396. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +0 -2
  397. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +123 -89
  398. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +25 -25
  399. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.h +0 -4
  400. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +48 -33
  401. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +13 -11
  402. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +0 -1
  403. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +42 -36
  404. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +19 -13
  405. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.h +0 -1
  406. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +101 -79
  407. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +61 -31
  408. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.h +0 -5
  409. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +83 -60
  410. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +37 -19
  411. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.h +0 -2
  412. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +56 -40
  413. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +15 -13
  414. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.h +0 -1
  415. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +34 -29
  416. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +13 -11
  417. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.h +0 -1
  418. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +32 -27
  419. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +13 -11
  420. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.h +0 -1
  421. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +88 -71
  422. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +48 -30
  423. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.h +0 -3
  424. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +37 -30
  425. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +1 -5
  426. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.h +0 -2
  427. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +95 -71
  428. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +36 -22
  429. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.h +0 -2
  430. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +79 -56
  431. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +26 -18
  432. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.h +0 -2
  433. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +164 -124
  434. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +54 -40
  435. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +0 -4
  436. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +200 -147
  437. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +47 -41
  438. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.h +0 -7
  439. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +160 -130
  440. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +89 -47
  441. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.h +0 -5
  442. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +78 -62
  443. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +26 -20
  444. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.h +0 -3
  445. data/src/core/ext/upb-gen/envoy/type/v3/http.upb.h +2 -5
  446. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.c +1 -1
  447. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +21 -19
  448. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +13 -7
  449. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.h +0 -1
  450. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +43 -36
  451. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +22 -12
  452. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.h +0 -2
  453. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +67 -55
  454. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +36 -18
  455. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.h +0 -3
  456. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +62 -51
  457. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +33 -19
  458. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.h +0 -2
  459. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb.h +2 -5
  460. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.c +1 -1
  461. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +25 -23
  462. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +15 -7
  463. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.h +0 -1
  464. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +37 -33
  465. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +19 -13
  466. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.h +0 -1
  467. data/src/core/ext/upb-gen/google/api/annotations.upb.h +15 -13
  468. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +22 -7
  469. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.h +1 -1
  470. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +619 -430
  471. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +260 -168
  472. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h +0 -13
  473. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +734 -518
  474. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +312 -182
  475. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.h +0 -16
  476. data/src/core/ext/upb-gen/google/api/http.upb.h +146 -105
  477. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +65 -29
  478. data/src/core/ext/upb-gen/google/api/http.upb_minitable.h +0 -3
  479. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +52 -37
  480. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +19 -11
  481. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.h +0 -1
  482. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +23 -21
  483. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +15 -7
  484. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h +0 -1
  485. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2236 -1514
  486. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +824 -406
  487. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +0 -34
  488. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +23 -21
  489. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +15 -7
  490. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.h +0 -1
  491. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +19 -17
  492. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -3
  493. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.h +0 -1
  494. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +149 -100
  495. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +59 -43
  496. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.h +0 -4
  497. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +23 -21
  498. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +15 -7
  499. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.h +0 -1
  500. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +181 -139
  501. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +99 -53
  502. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.h +0 -9
  503. data/src/core/ext/upb-gen/google/rpc/status.upb.h +52 -37
  504. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +19 -11
  505. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.h +0 -1
  506. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +1553 -1157
  507. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +712 -410
  508. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +0 -39
  509. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +189 -125
  510. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +59 -35
  511. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +0 -3
  512. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +454 -343
  513. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +204 -130
  514. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +0 -11
  515. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +369 -243
  516. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +109 -79
  517. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +0 -7
  518. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +256 -175
  519. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +122 -68
  520. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +0 -8
  521. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +71 -51
  522. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +39 -19
  523. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.h +0 -2
  524. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +583 -407
  525. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +259 -145
  526. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.h +0 -12
  527. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +114 -84
  528. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +52 -30
  529. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +0 -4
  530. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +41 -34
  531. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +25 -13
  532. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.h +0 -2
  533. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +309 -230
  534. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +123 -79
  535. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.h +0 -9
  536. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +98 -63
  537. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +51 -23
  538. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.h +0 -3
  539. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +505 -312
  540. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +159 -87
  541. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.h +0 -9
  542. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +128 -91
  543. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +82 -41
  544. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.h +5 -8
  545. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +36 -29
  546. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +36 -13
  547. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.h +1 -2
  548. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +13 -11
  549. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +22 -7
  550. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.h +1 -1
  551. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +36 -29
  552. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +36 -13
  553. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.h +1 -2
  554. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +34 -27
  555. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +34 -13
  556. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.h +1 -2
  557. data/src/core/ext/upb-gen/validate/validate.upb.h +1682 -1130
  558. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +587 -247
  559. data/src/core/ext/upb-gen/validate/validate.upb_minitable.h +4 -27
  560. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +128 -91
  561. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +82 -41
  562. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.h +5 -8
  563. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +36 -29
  564. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +36 -13
  565. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.h +1 -2
  566. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +13 -11
  567. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +22 -7
  568. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.h +1 -1
  569. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +122 -90
  570. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +82 -39
  571. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.h +3 -7
  572. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +34 -27
  573. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +34 -13
  574. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.h +1 -2
  575. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +21 -19
  576. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +13 -7
  577. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.h +0 -1
  578. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +29 -26
  579. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +17 -11
  580. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.h +0 -1
  581. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +70 -58
  582. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +32 -22
  583. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.h +0 -2
  584. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +53 -34
  585. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +26 -16
  586. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.h +0 -2
  587. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +29 -26
  588. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +17 -11
  589. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.h +0 -1
  590. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +37 -33
  591. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +22 -14
  592. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.h +0 -1
  593. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +102 -76
  594. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +43 -23
  595. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.h +0 -2
  596. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +33 -30
  597. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +19 -11
  598. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.h +0 -1
  599. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +136 -83
  600. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +41 -33
  601. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.h +0 -4
  602. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +46 -32
  603. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +20 -12
  604. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.h +0 -1
  605. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +29 -26
  606. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +20 -12
  607. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.h +0 -1
  608. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +93 -61
  609. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +28 -20
  610. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.h +0 -2
  611. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +19 -17
  612. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -3
  613. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.h +0 -1
  614. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +105 -71
  615. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +32 -22
  616. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.h +0 -2
  617. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +430 -314
  618. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +153 -123
  619. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.h +0 -10
  620. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +307 -199
  621. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +74 -62
  622. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.h +0 -6
  623. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +52 -42
  624. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +19 -13
  625. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.h +0 -2
  626. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +95 -71
  627. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +36 -22
  628. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.h +0 -2
  629. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +92 -77
  630. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +42 -28
  631. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.h +0 -2
  632. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +67 -55
  633. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +36 -18
  634. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h +0 -3
  635. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +29 -26
  636. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +17 -11
  637. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h +0 -1
  638. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +885 -855
  639. data/src/core/filter/composite/composite_filter.cc +10 -3
  640. data/src/core/filter/composite/composite_filter.h +11 -1
  641. data/src/core/filter/filter_args.h +4 -22
  642. data/src/core/handshaker/handshaker.cc +10 -2
  643. data/src/core/handshaker/security/secure_endpoint.cc +73 -5
  644. data/src/core/lib/channel/channel_args.h +12 -6
  645. data/src/core/lib/channel/channel_stack.cc +1 -2
  646. data/src/core/lib/channel/channel_stack.h +1 -7
  647. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  648. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -7
  649. data/src/core/lib/channel/promise_based_filter.cc +13 -1
  650. data/src/core/lib/channel/promise_based_filter.h +4 -5
  651. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +0 -13
  652. data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +48 -0
  653. data/src/core/lib/event_engine/posix.h +2 -0
  654. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -1
  655. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +11 -8
  656. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -6
  657. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  658. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +2 -1
  659. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +10 -10
  660. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  661. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +1 -1
  662. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -4
  663. data/src/core/lib/experiments/experiments.cc +261 -90
  664. data/src/core/lib/experiments/experiments.h +136 -35
  665. data/src/core/lib/iomgr/buffer_list.h +1 -1
  666. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1 -1
  667. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  668. data/src/core/lib/iomgr/tcp_posix.cc +2 -1
  669. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -3
  670. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  671. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  672. data/src/core/lib/promise/interceptor_list.h +1 -1
  673. data/src/core/lib/promise/try_seq.h +2 -2
  674. data/src/core/lib/resource_quota/telemetry.cc +54 -0
  675. data/src/core/lib/resource_quota/telemetry.h +5 -23
  676. data/src/core/lib/surface/call.cc +6 -1
  677. data/src/core/lib/surface/call.h +9 -0
  678. data/src/core/lib/surface/version.cc +2 -2
  679. data/src/core/lib/transport/promise_endpoint.h +7 -5
  680. data/src/core/lib/transport/transport.h +31 -4
  681. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +146 -74
  682. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +88 -0
  683. data/src/core/mitigation_engine/mitigation_engine.h +81 -0
  684. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  685. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -5
  686. data/src/core/resolver/xds/xds_resolver.cc +23 -133
  687. data/src/core/server/server.cc +40 -18
  688. data/src/core/server/server.h +25 -14
  689. data/src/core/server/server_config_selector_filter.cc +122 -0
  690. data/src/core/server/server_config_selector_filter.h +1 -0
  691. data/src/core/server/xds_server_config_fetcher.cc +6 -0
  692. data/src/core/server/xds_server_config_fetcher_legacy.cc +1333 -0
  693. data/src/core/telemetry/histogram.h +10 -89
  694. data/src/core/telemetry/instrument.h +42 -28
  695. data/src/core/transport/message_size_service_config.cc +123 -0
  696. data/src/core/transport/message_size_service_config.h +85 -0
  697. data/src/core/transport/session_endpoint.cc +29 -4
  698. data/src/core/transport/session_endpoint.h +4 -0
  699. data/src/core/tsi/alts/crypt/gsec.h +4 -2
  700. data/src/core/tsi/ssl_transport_security.cc +6 -4
  701. data/src/core/util/http_client/parser.cc +1 -1
  702. data/src/core/util/lru_cache.h +2 -0
  703. data/src/core/util/ref_counted_string.h +1 -1
  704. data/src/core/util/tchar.cc +13 -7
  705. data/src/core/util/trie_lookup.h +1 -1
  706. data/src/core/xds/grpc/blackboard.cc +58 -0
  707. data/src/core/{filter → xds/grpc}/blackboard.h +30 -11
  708. data/src/core/xds/grpc/xds_client_grpc.cc +14 -1
  709. data/src/core/xds/grpc/xds_client_grpc.h +1 -0
  710. data/src/core/xds/grpc/xds_common_types.cc +40 -0
  711. data/src/core/xds/grpc/xds_common_types.h +13 -0
  712. data/src/core/xds/grpc/xds_common_types_parser.cc +37 -34
  713. data/src/core/xds/grpc/xds_endpoint_parser.cc +1 -1
  714. data/src/core/xds/grpc/xds_http_composite_filter.cc +34 -18
  715. data/src/core/xds/grpc/xds_http_composite_filter.h +6 -3
  716. data/src/core/xds/grpc/xds_http_fault_filter.cc +0 -149
  717. data/src/core/xds/grpc/xds_http_fault_filter.h +19 -8
  718. data/src/core/xds/grpc/xds_http_filter.cc +2 -1
  719. data/src/core/xds/grpc/xds_http_filter.h +6 -16
  720. data/src/core/xds/grpc/xds_http_filter_registry.cc +0 -2
  721. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +25 -119
  722. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +27 -15
  723. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +0 -149
  724. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +19 -8
  725. data/src/core/xds/grpc/xds_lb_policy_registry.cc +18 -0
  726. data/src/core/xds/grpc/xds_listener_parser.cc +13 -9
  727. data/src/core/xds/grpc/xds_route_config.h +1 -1
  728. data/src/core/xds/grpc/xds_route_config_parser.cc +3 -5
  729. data/src/core/xds/grpc/xds_routing.cc +5 -11
  730. data/src/core/xds/grpc/xds_routing.h +2 -3
  731. data/src/core/xds/xds_client/lrs_client.cc +2 -2
  732. data/src/ruby/ext/grpc/rb_byte_buffer.c +1 -0
  733. data/src/ruby/ext/grpc/rb_call.c +3 -0
  734. data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
  735. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  736. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  737. data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
  738. data/src/ruby/ext/grpc/rb_completion_queue.c +1 -0
  739. data/src/ruby/ext/grpc/rb_compression_options.c +1 -0
  740. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -4
  741. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -6
  742. data/src/ruby/ext/grpc/rb_server.c +1 -0
  743. data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
  744. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
  745. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
  746. data/src/ruby/lib/grpc/core/call_credentials.rb +86 -0
  747. data/src/ruby/lib/grpc/core/channel_credentials.rb +69 -0
  748. data/src/ruby/lib/grpc/core/credentials_helper.rb +126 -0
  749. data/src/ruby/lib/grpc/generic/client_stub.rb +86 -73
  750. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  751. data/src/ruby/lib/grpc/version.rb +1 -1
  752. data/src/ruby/lib/grpc.rb +25 -0
  753. data/src/ruby/spec/call_credentials_spec.rb +52 -2
  754. data/src/ruby/spec/credentials_helper_spec.rb +80 -0
  755. data/src/ruby/spec/generic/client_stub_spec.rb +27 -4
  756. data/src/ruby/spec/generic/server_interceptors_spec.rb +17 -3
  757. data/third_party/upb/upb/base/error_handler.h +79 -0
  758. data/third_party/upb/upb/base/internal/log2.h +29 -5
  759. data/third_party/upb/upb/generated_code_support.h +1 -0
  760. data/third_party/upb/upb/hash/common.c +129 -14
  761. data/third_party/upb/upb/hash/common.h +1 -1
  762. data/third_party/upb/upb/hash/ext_table.h +65 -0
  763. data/third_party/upb/upb/lex/strtod.c +14 -5
  764. data/third_party/upb/upb/mem/arena.c +113 -95
  765. data/third_party/upb/upb/mem/internal/arena.h +13 -8
  766. data/third_party/upb/upb/message/accessors.c +2 -3
  767. data/third_party/upb/upb/message/accessors.h +32 -12
  768. data/third_party/upb/upb/message/array.c +51 -2
  769. data/third_party/upb/upb/message/array.h +10 -0
  770. data/third_party/upb/upb/message/copy.c +18 -34
  771. data/third_party/upb/upb/message/internal/accessors.h +15 -49
  772. data/third_party/upb/upb/message/internal/array.h +1 -1
  773. data/third_party/upb/upb/message/internal/map.h +1 -1
  774. data/third_party/upb/upb/message/internal/message.c +8 -1
  775. data/third_party/upb/upb/message/internal/message.h +40 -10
  776. data/third_party/upb/upb/message/message.c +3 -2
  777. data/third_party/upb/upb/message/value.h +0 -6
  778. data/third_party/upb/upb/mini_descriptor/decode.c +78 -59
  779. data/third_party/upb/upb/mini_descriptor/link.c +8 -6
  780. data/third_party/upb/upb/mini_table/extension_registry.c +17 -49
  781. data/third_party/upb/upb/mini_table/extension_registry.h +5 -17
  782. data/third_party/upb/upb/mini_table/generated_registry.c +180 -0
  783. data/third_party/upb/upb/mini_table/generated_registry.h +66 -0
  784. data/third_party/upb/upb/mini_table/internal/extension.h +5 -3
  785. data/third_party/upb/upb/mini_table/internal/field.h +7 -5
  786. data/third_party/upb/upb/mini_table/internal/generated_registry.h +37 -0
  787. data/third_party/upb/upb/mini_table/internal/message.c +0 -18
  788. data/third_party/upb/upb/mini_table/internal/message.h +24 -41
  789. data/third_party/upb/upb/mini_table/internal/size_log2.h +2 -1
  790. data/third_party/upb/upb/mini_table/internal/sub.h +2 -5
  791. data/third_party/upb/upb/mini_table/message.h +34 -13
  792. data/third_party/upb/upb/port/atomic.h +180 -74
  793. data/third_party/upb/upb/port/def.inc +194 -29
  794. data/third_party/upb/upb/port/sanitizers.h +15 -0
  795. data/third_party/upb/upb/port/undef.inc +6 -2
  796. data/third_party/upb/upb/reflection/common.h +0 -6
  797. data/third_party/upb/upb/reflection/def.hpp +8 -12
  798. data/third_party/upb/upb/reflection/def_pool.c +85 -33
  799. data/third_party/upb/upb/reflection/def_pool.h +38 -8
  800. data/third_party/upb/upb/reflection/def_type.h +3 -0
  801. data/third_party/upb/upb/reflection/enum_def.c +45 -33
  802. data/third_party/upb/upb/reflection/enum_def.h +8 -4
  803. data/third_party/upb/upb/reflection/enum_reserved_range.c +7 -3
  804. data/third_party/upb/upb/reflection/enum_value_def.c +14 -29
  805. data/third_party/upb/upb/reflection/enum_value_def.h +5 -4
  806. data/third_party/upb/upb/reflection/extension_range.c +15 -14
  807. data/third_party/upb/upb/reflection/extension_range.h +7 -4
  808. data/third_party/upb/upb/reflection/field_def.c +114 -96
  809. data/third_party/upb/upb/reflection/field_def.h +3 -3
  810. data/third_party/upb/upb/reflection/file_def.c +71 -65
  811. data/third_party/upb/upb/reflection/file_def.h +4 -5
  812. data/third_party/upb/upb/reflection/internal/def_builder.c +22 -14
  813. data/third_party/upb/upb/reflection/internal/def_builder.h +44 -38
  814. data/third_party/upb/upb/reflection/internal/def_pool.h +5 -1
  815. data/third_party/upb/upb/reflection/internal/enum_def.h +6 -4
  816. data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +3 -2
  817. data/third_party/upb/upb/reflection/internal/enum_value_def.h +7 -4
  818. data/third_party/upb/upb/reflection/internal/extension_range.h +4 -3
  819. data/third_party/upb/upb/reflection/internal/field_def.h +15 -12
  820. data/third_party/upb/upb/reflection/internal/file_def.h +8 -1
  821. data/third_party/upb/upb/reflection/internal/message_def.h +10 -7
  822. data/third_party/upb/upb/reflection/internal/message_reserved_range.h +3 -1
  823. data/third_party/upb/upb/reflection/internal/method_def.h +6 -6
  824. data/third_party/upb/upb/reflection/internal/oneof_def.h +6 -6
  825. data/third_party/upb/upb/reflection/internal/service_def.h +9 -6
  826. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  827. data/third_party/upb/upb/reflection/message_def.c +46 -53
  828. data/third_party/upb/upb/reflection/message_def.h +6 -7
  829. data/third_party/upb/upb/reflection/message_reserved_range.c +7 -6
  830. data/third_party/upb/upb/reflection/method_def.c +22 -20
  831. data/third_party/upb/upb/reflection/method_def.h +4 -4
  832. data/third_party/upb/upb/reflection/oneof_def.c +17 -15
  833. data/third_party/upb/upb/reflection/oneof_def.h +6 -3
  834. data/third_party/upb/upb/reflection/service_def.c +50 -23
  835. data/third_party/upb/upb/reflection/service_def.h +7 -4
  836. data/third_party/upb/upb/text/internal/encode.c +7 -10
  837. data/third_party/upb/upb/wire/decode.c +269 -430
  838. data/third_party/upb/upb/wire/decode.h +6 -45
  839. data/third_party/upb/upb/wire/decode_fast/combinations.h +7 -3
  840. data/third_party/upb/upb/wire/decode_fast/select.c +7 -2
  841. data/third_party/upb/upb/wire/encode.c +144 -106
  842. data/third_party/upb/upb/wire/encode.h +6 -2
  843. data/third_party/upb/upb/wire/eps_copy_input_stream.c +36 -7
  844. data/third_party/upb/upb/wire/eps_copy_input_stream.h +94 -380
  845. data/third_party/upb/upb/wire/internal/decoder.c +1 -14
  846. data/third_party/upb/upb/wire/internal/decoder.h +84 -24
  847. data/third_party/upb/upb/wire/internal/eps_copy_input_stream.h +339 -0
  848. data/third_party/upb/upb/wire/internal/reader.h +29 -12
  849. data/third_party/upb/upb/wire/reader.c +35 -22
  850. data/third_party/upb/upb/wire/reader.h +11 -18
  851. data/third_party/utf8_range/utf8_range.c +1 -1
  852. data/third_party/utf8_range/utf8_range.h +2 -1
  853. metadata +27 -13
  854. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +0 -117
  855. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +0 -109
  856. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +0 -80
  857. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +0 -86
  858. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +0 -83
  859. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +0 -91
  860. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +0 -217
  861. data/src/core/filter/blackboard.cc +0 -33
  862. data/third_party/upb/upb/message/internal/tagged_ptr.h +0 -56
  863. data/third_party/upb/upb/message/tagged_ptr.h +0 -48
@@ -14,6 +14,7 @@
14
14
  #include <string.h>
15
15
 
16
16
  #include "upb/base/descriptor_constants.h"
17
+ #include "upb/base/error_handler.h"
17
18
  #include "upb/base/internal/endian.h"
18
19
  #include "upb/base/string_view.h"
19
20
  #include "upb/hash/common.h"
@@ -25,10 +26,8 @@
25
26
  #include "upb/message/internal/map.h"
26
27
  #include "upb/message/internal/map_entry.h"
27
28
  #include "upb/message/internal/message.h"
28
- #include "upb/message/internal/tagged_ptr.h"
29
29
  #include "upb/message/map.h"
30
30
  #include "upb/message/message.h"
31
- #include "upb/message/tagged_ptr.h"
32
31
  #include "upb/mini_table/enum.h"
33
32
  #include "upb/mini_table/extension.h"
34
33
  #include "upb/mini_table/extension_registry.h"
@@ -97,39 +96,18 @@ typedef union {
97
96
  uint32_t size;
98
97
  } wireval;
99
98
 
100
- // Ideally these two functions should take the owning MiniTable pointer as a
101
- // first argument, then we could just put them in mini_table/message.h as nice
102
- // clean getters. But we don't have that so instead we gotta write these
103
- // Frankenfunctions that take an array of subtables.
104
- // TODO: Move these to mini_table/ anyway since there are other places
105
- // that could use them.
106
-
107
- // Returns the MiniTable corresponding to a given MiniTableField
108
- // from an array of MiniTableSubs.
109
- static const upb_MiniTable* _upb_MiniTableSubs_MessageByField(
110
- const upb_MiniTableSubInternal* subs, const upb_MiniTableField* field) {
111
- return *subs[field->UPB_PRIVATE(submsg_index)].UPB_PRIVATE(submsg);
99
+ static void _upb_Decoder_AssumeEpsHasErrorHandler(upb_Decoder* d) {
100
+ UPB_ASSUME(upb_EpsCopyInputStream_HasErrorHandler(&d->input));
112
101
  }
113
102
 
114
- // Returns the MiniTableEnum corresponding to a given MiniTableField
115
- // from an array of MiniTableSub.
116
- static const upb_MiniTableEnum* _upb_MiniTableSubs_EnumByField(
117
- const upb_MiniTableSubInternal* subs, const upb_MiniTableField* field) {
118
- return subs[field->UPB_PRIVATE(submsg_index)].UPB_PRIVATE(subenum);
119
- }
120
-
121
- static void _upb_Decoder_VerifyUtf8(upb_Decoder* d, const char* buf, int len) {
122
- if (!_upb_Decoder_VerifyUtf8Inline(buf, len)) {
123
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_BadUtf8);
124
- }
125
- }
103
+ #define EPS(d) (_upb_Decoder_AssumeEpsHasErrorHandler(d), &(d)->input)
126
104
 
127
105
  static bool _upb_Decoder_Reserve(upb_Decoder* d, upb_Array* arr, size_t elem) {
128
106
  bool need_realloc =
129
107
  arr->UPB_PRIVATE(capacity) - arr->UPB_PRIVATE(size) < elem;
130
108
  if (need_realloc && !UPB_PRIVATE(_upb_Array_Realloc)(
131
109
  arr, arr->UPB_PRIVATE(size) + elem, &d->arena)) {
132
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
110
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
133
111
  }
134
112
  return need_realloc;
135
113
  }
@@ -139,79 +117,14 @@ typedef struct {
139
117
  uint64_t val;
140
118
  } _upb_DecodeLongVarintReturn;
141
119
 
142
- UPB_NOINLINE
143
- static _upb_DecodeLongVarintReturn _upb_Decoder_DecodeLongVarint(
144
- const char* ptr, uint64_t val, upb_Decoder* d) {
145
- uint64_t byte;
146
- for (int i = 1; i < 10; i++) {
147
- byte = (uint8_t)ptr[i];
148
- val += (byte - 1) << (i * 7);
149
- if (!(byte & 0x80)) {
150
- return (_upb_DecodeLongVarintReturn){.ptr = ptr + i + 1, .val = val};
151
- }
152
- }
153
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
154
- }
155
-
156
- UPB_NOINLINE
157
- static _upb_DecodeLongVarintReturn _upb_Decoder_DecodeLongTag(const char* ptr,
158
- uint64_t val,
159
- upb_Decoder* d) {
160
- uint64_t byte;
161
- for (int i = 1; i < 5; i++) {
162
- byte = (uint8_t)ptr[i];
163
- val += (byte - 1) << (i * 7);
164
- if (!(byte & 0x80)) {
165
- if (val > UINT32_MAX) {
166
- break;
167
- }
168
- return (_upb_DecodeLongVarintReturn){.ptr = ptr + i + 1, .val = val};
169
- }
170
- }
171
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
172
- }
173
-
174
- UPB_FORCEINLINE
175
- const char* _upb_Decoder_DecodeVarint(upb_Decoder* d, const char* ptr,
176
- uint64_t* val) {
177
- UPB_PRIVATE(upb_EpsCopyInputStream_ConsumeBytes)(&d->input, 10);
178
- uint64_t byte = (uint8_t)*ptr;
179
- if (UPB_LIKELY((byte & 0x80) == 0)) {
180
- *val = byte;
181
- return ptr + 1;
182
- } else {
183
- _upb_DecodeLongVarintReturn res =
184
- _upb_Decoder_DecodeLongVarint(ptr, byte, d);
185
- *val = res.val;
186
- return res.ptr;
187
- }
188
- }
189
-
190
- UPB_FORCEINLINE
191
- const char* _upb_Decoder_DecodeTag(upb_Decoder* d, const char* ptr,
192
- uint32_t* val) {
193
- UPB_PRIVATE(upb_EpsCopyInputStream_ConsumeBytes)(&d->input, 5);
194
- uint64_t byte = (uint8_t)*ptr;
195
- if (UPB_LIKELY((byte & 0x80) == 0)) {
196
- *val = byte;
197
- return ptr + 1;
198
- } else {
199
- _upb_DecodeLongVarintReturn res = _upb_Decoder_DecodeLongTag(ptr, byte, d);
200
- *val = res.val;
201
- return res.ptr;
202
- }
203
- }
204
-
120
+ // This is identical to _upb_Decoder_DecodeTag() except that the maximum value
121
+ // is INT32_MAX instead of UINT32_MAX.
205
122
  UPB_FORCEINLINE
206
123
  const char* upb_Decoder_DecodeSize(upb_Decoder* d, const char* ptr,
207
124
  uint32_t* size) {
208
- uint64_t size64;
209
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &size64);
210
- if (size64 >= INT32_MAX ||
211
- !upb_EpsCopyInputStream_CheckSize(&d->input, ptr, (int)size64)) {
212
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
213
- }
214
- *size = size64;
125
+ int sz;
126
+ ptr = upb_WireReader_ReadSize(ptr, &sz, EPS(d));
127
+ *size = sz;
215
128
  return ptr;
216
129
  }
217
130
 
@@ -249,69 +162,28 @@ static void _upb_Decoder_Munge(const upb_MiniTableField* field, wireval* val) {
249
162
  static upb_Message* _upb_Decoder_NewSubMessage2(upb_Decoder* d,
250
163
  const upb_MiniTable* subl,
251
164
  const upb_MiniTableField* field,
252
- upb_TaggedMessagePtr* target) {
165
+ upb_Message** target) {
253
166
  UPB_ASSERT(subl);
254
167
  upb_Message* msg = _upb_Message_New(subl, &d->arena);
255
- if (!msg) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
256
-
257
- // Extensions should not be unlinked. A message extension should not be
258
- // registered until its sub-message type is available to be linked.
259
- bool is_empty = UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl);
260
- bool is_extension = field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension;
261
- UPB_ASSERT(!(is_empty && is_extension));
262
-
263
- if (is_empty && !(d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked)) {
264
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_UnlinkedSubMessage);
265
- }
168
+ if (!msg) upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
266
169
 
267
- upb_TaggedMessagePtr tagged =
268
- UPB_PRIVATE(_upb_TaggedMessagePtr_Pack)(msg, is_empty);
269
- memcpy(target, &tagged, sizeof(tagged));
170
+ *target = msg;
270
171
  return msg;
271
172
  }
272
173
 
273
- static upb_Message* _upb_Decoder_NewSubMessage(
274
- upb_Decoder* d, const upb_MiniTableSubInternal* subs,
275
- const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
276
- const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
174
+ static upb_Message* _upb_Decoder_NewSubMessage(upb_Decoder* d,
175
+ const upb_MiniTableField* field,
176
+ upb_Message** target) {
177
+ const upb_MiniTable* subl = upb_MiniTable_GetSubMessageTable(field);
277
178
  return _upb_Decoder_NewSubMessage2(d, subl, field, target);
278
179
  }
279
180
 
280
- static upb_Message* _upb_Decoder_ReuseSubMessage(
281
- upb_Decoder* d, const upb_MiniTableSubInternal* subs,
282
- const upb_MiniTableField* field, upb_TaggedMessagePtr* target) {
283
- upb_TaggedMessagePtr tagged = *target;
284
- const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
285
- UPB_ASSERT(subl);
286
- if (!upb_TaggedMessagePtr_IsEmpty(tagged) ||
287
- UPB_PRIVATE(_upb_MiniTable_IsEmpty)(subl)) {
288
- return UPB_PRIVATE(_upb_TaggedMessagePtr_GetMessage)(tagged);
289
- }
290
-
291
- // We found an empty message from a previous parse that was performed before
292
- // this field was linked. But it is linked now, so we want to allocate a new
293
- // message of the correct type and promote data into it before continuing.
294
- upb_Message* existing =
295
- UPB_PRIVATE(_upb_TaggedMessagePtr_GetEmptyMessage)(tagged);
296
- upb_Message* promoted = _upb_Decoder_NewSubMessage(d, subs, field, target);
297
- uintptr_t iter = kUpb_Message_UnknownBegin;
298
- upb_StringView unknown;
299
- while (upb_Message_NextUnknown(existing, &unknown, &iter)) {
300
- upb_DecodeStatus status =
301
- upb_Decode(unknown.data, unknown.size, promoted, subl, d->extreg,
302
- d->options, &d->arena);
303
- if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
181
+ static const char* _upb_Decoder_ReadString2(upb_Decoder* d, const char* ptr,
182
+ int size, upb_StringView* str,
183
+ bool validate_utf8) {
184
+ if (!_upb_Decoder_ReadString(d, &ptr, size, str, validate_utf8)) {
185
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
304
186
  }
305
- return promoted;
306
- }
307
-
308
- static const char* _upb_Decoder_ReadString(upb_Decoder* d, const char* ptr,
309
- int size, upb_StringView* str) {
310
- const char* str_ptr = ptr;
311
- ptr = upb_EpsCopyInputStream_ReadString(&d->input, &str_ptr, size, &d->arena);
312
- if (!ptr) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
313
- str->data = str_ptr;
314
- str->size = size;
315
187
  return ptr;
316
188
  }
317
189
 
@@ -321,12 +193,12 @@ const char* _upb_Decoder_RecurseSubMessage(upb_Decoder* d, const char* ptr,
321
193
  const upb_MiniTable* subl,
322
194
  uint32_t expected_end_group) {
323
195
  if (--d->depth < 0) {
324
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_MaxDepthExceeded);
196
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_MaxDepthExceeded);
325
197
  }
326
198
  ptr = _upb_Decoder_DecodeMessage(d, ptr, submsg, subl);
327
199
  d->depth++;
328
200
  if (d->end_group != expected_end_group) {
329
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
201
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
330
202
  }
331
203
  return ptr;
332
204
  }
@@ -334,14 +206,13 @@ const char* _upb_Decoder_RecurseSubMessage(upb_Decoder* d, const char* ptr,
334
206
  UPB_FORCEINLINE
335
207
  const char* _upb_Decoder_DecodeSubMessage(upb_Decoder* d, const char* ptr,
336
208
  upb_Message* submsg,
337
- const upb_MiniTableSubInternal* subs,
338
209
  const upb_MiniTableField* field,
339
- int size) {
340
- int saved_delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
341
- const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
210
+ size_t size) {
211
+ ptrdiff_t delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, size);
212
+ const upb_MiniTable* subl = upb_MiniTable_GetSubMessageTable(field);
342
213
  UPB_ASSERT(subl);
343
214
  ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, DECODE_NOGROUP);
344
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_delta);
215
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
345
216
  return ptr;
346
217
  }
347
218
 
@@ -350,26 +221,19 @@ const char* _upb_Decoder_DecodeGroup(upb_Decoder* d, const char* ptr,
350
221
  upb_Message* submsg,
351
222
  const upb_MiniTable* subl,
352
223
  uint32_t number) {
353
- if (_upb_Decoder_IsDone(d, &ptr)) {
354
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
224
+ if (upb_EpsCopyInputStream_IsDone(EPS(d), &ptr)) {
225
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
355
226
  }
356
227
  ptr = _upb_Decoder_RecurseSubMessage(d, ptr, submsg, subl, number);
357
228
  d->end_group = DECODE_NOGROUP;
358
229
  return ptr;
359
230
  }
360
231
 
361
- UPB_FORCEINLINE
362
- const char* _upb_Decoder_DecodeUnknownGroup(upb_Decoder* d, const char* ptr,
363
- uint32_t number) {
364
- return _upb_Decoder_DecodeGroup(d, ptr, NULL, NULL, number);
365
- }
366
-
367
232
  UPB_FORCEINLINE
368
233
  const char* _upb_Decoder_DecodeKnownGroup(upb_Decoder* d, const char* ptr,
369
234
  upb_Message* submsg,
370
- const upb_MiniTableSubInternal* subs,
371
235
  const upb_MiniTableField* field) {
372
- const upb_MiniTable* subl = _upb_MiniTableSubs_MessageByField(subs, field);
236
+ const upb_MiniTable* subl = upb_MiniTable_GetSubMessageTable(field);
373
237
  UPB_ASSERT(subl);
374
238
  return _upb_Decoder_DecodeGroup(d, ptr, submsg, subl,
375
239
  field->UPB_PRIVATE(number));
@@ -404,8 +268,8 @@ void _upb_Decoder_AddEnumValueToUnknown(upb_Decoder* d, upb_Message* msg,
404
268
  end = upb_Decoder_EncodeVarint32(val->uint64_val, end);
405
269
 
406
270
  if (!UPB_PRIVATE(_upb_Message_AddUnknown)(unknown_msg, buf, end - buf,
407
- &d->arena, NULL)) {
408
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
271
+ &d->arena, kUpb_AddUnknown_Copy)) {
272
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
409
273
  }
410
274
  }
411
275
 
@@ -414,34 +278,42 @@ const char* _upb_Decoder_DecodeFixedPacked(upb_Decoder* d, const char* ptr,
414
278
  upb_Array* arr, wireval* val,
415
279
  const upb_MiniTableField* field,
416
280
  int lg2) {
281
+ upb_StringView sv;
282
+ ptr = upb_EpsCopyInputStream_ReadStringEphemeral(&d->input, ptr, val->size,
283
+ &sv);
284
+ if (!ptr) upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
417
285
  int mask = (1 << lg2) - 1;
418
- size_t count = val->size >> lg2;
419
- if ((val->size & mask) != 0) {
420
- // Length isn't a round multiple of elem size.
421
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
286
+ if (UPB_UNLIKELY((val->size & mask) != 0 || ptr == NULL)) {
287
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
422
288
  }
289
+ size_t count = val->size >> lg2;
290
+ if (count == 0) return ptr;
423
291
  _upb_Decoder_Reserve(d, arr, count);
424
292
  void* mem = UPB_PTR_AT(upb_Array_MutableDataPtr(arr),
425
293
  arr->UPB_PRIVATE(size) << lg2, void);
426
294
  arr->UPB_PRIVATE(size) += count;
427
- // Note: if/when the decoder supports multi-buffer input, we will need to
428
- // handle buffer seams here.
429
295
  if (upb_IsLittleEndian()) {
430
- ptr = upb_EpsCopyInputStream_Copy(&d->input, ptr, mem, val->size);
296
+ memcpy(mem, sv.data, sv.size);
431
297
  } else {
432
- int delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
298
+ const char* src = sv.data;
299
+ const char* src_end = src + sv.size;
433
300
  char* dst = mem;
434
- while (!_upb_Decoder_IsDone(d, &ptr)) {
435
- if (lg2 == 2) {
436
- ptr = upb_WireReader_ReadFixed32(ptr, dst, &d->input);
437
- dst += 4;
438
- } else {
439
- UPB_ASSERT(lg2 == 3);
440
- ptr = upb_WireReader_ReadFixed64(ptr, dst, &d->input);
441
- dst += 8;
301
+ if (lg2 == 2) {
302
+ for (; src < src_end; src += 4, dst += 4) {
303
+ uint32_t x;
304
+ memcpy(&x, src, 4);
305
+ x = upb_BigEndian32(x);
306
+ memcpy(dst, &x, 4);
307
+ }
308
+ } else {
309
+ UPB_ASSERT(lg2 == 3);
310
+ for (; src < src_end; src += 8, dst += 8) {
311
+ uint64_t x;
312
+ memcpy(&x, src, 8);
313
+ x = upb_BigEndian64(x);
314
+ memcpy(dst, &x, 8);
442
315
  }
443
316
  }
444
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
445
317
  }
446
318
 
447
319
  return ptr;
@@ -453,12 +325,12 @@ const char* _upb_Decoder_DecodeVarintPacked(upb_Decoder* d, const char* ptr,
453
325
  const upb_MiniTableField* field,
454
326
  int lg2) {
455
327
  int scale = 1 << lg2;
456
- int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
328
+ ptrdiff_t delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
457
329
  char* out = UPB_PTR_AT(upb_Array_MutableDataPtr(arr),
458
330
  arr->UPB_PRIVATE(size) << lg2, void);
459
- while (!_upb_Decoder_IsDone(d, &ptr)) {
331
+ while (!upb_EpsCopyInputStream_IsDone(EPS(d), &ptr)) {
460
332
  wireval elem;
461
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
333
+ ptr = upb_WireReader_ReadVarint(ptr, &elem.uint64_val, EPS(d));
462
334
  _upb_Decoder_Munge(field, &elem);
463
335
  if (_upb_Decoder_Reserve(d, arr, 1)) {
464
336
  out = UPB_PTR_AT(upb_Array_MutableDataPtr(arr),
@@ -468,22 +340,21 @@ const char* _upb_Decoder_DecodeVarintPacked(upb_Decoder* d, const char* ptr,
468
340
  memcpy(out, &elem, scale);
469
341
  out += scale;
470
342
  }
471
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
343
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
472
344
  return ptr;
473
345
  }
474
346
 
475
347
  UPB_NOINLINE
476
348
  static const char* _upb_Decoder_DecodeEnumPacked(
477
349
  upb_Decoder* d, const char* ptr, upb_Message* msg, upb_Array* arr,
478
- const upb_MiniTableSubInternal* subs, const upb_MiniTableField* field,
479
- wireval* val) {
480
- const upb_MiniTableEnum* e = _upb_MiniTableSubs_EnumByField(subs, field);
481
- int saved_limit = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
350
+ const upb_MiniTableField* field, wireval* val) {
351
+ const upb_MiniTableEnum* e = upb_MiniTable_GetSubEnumTable(field);
352
+ ptrdiff_t delta = upb_EpsCopyInputStream_PushLimit(&d->input, ptr, val->size);
482
353
  char* out = UPB_PTR_AT(upb_Array_MutableDataPtr(arr),
483
354
  arr->UPB_PRIVATE(size) * 4, void);
484
- while (!_upb_Decoder_IsDone(d, &ptr)) {
355
+ while (!upb_EpsCopyInputStream_IsDone(EPS(d), &ptr)) {
485
356
  wireval elem;
486
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &elem.uint64_val);
357
+ ptr = upb_WireReader_ReadVarint(ptr, &elem.uint64_val, EPS(d));
487
358
  if (!upb_MiniTableEnum_CheckValue(e, elem.uint64_val)) {
488
359
  _upb_Decoder_AddEnumValueToUnknown(d, msg, field, &elem);
489
360
  continue;
@@ -496,7 +367,7 @@ static const char* _upb_Decoder_DecodeEnumPacked(
496
367
  memcpy(out, &elem, 4);
497
368
  out += 4;
498
369
  }
499
- upb_EpsCopyInputStream_PopLimit(&d->input, ptr, saved_limit);
370
+ upb_EpsCopyInputStream_PopLimit(&d->input, ptr, delta);
500
371
  return ptr;
501
372
  }
502
373
 
@@ -505,14 +376,14 @@ static upb_Array* _upb_Decoder_CreateArray(upb_Decoder* d,
505
376
  const upb_FieldType field_type = field->UPB_PRIVATE(descriptortype);
506
377
  const size_t lg2 = UPB_PRIVATE(_upb_FieldType_SizeLg2)(field_type);
507
378
  upb_Array* ret = UPB_PRIVATE(_upb_Array_New)(&d->arena, 4, lg2);
508
- if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
379
+ if (!ret) upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
509
380
  return ret;
510
381
  }
511
382
 
512
- static const char* _upb_Decoder_DecodeToArray(
513
- upb_Decoder* d, const char* ptr, upb_Message* msg,
514
- const upb_MiniTableSubInternal* subs, const upb_MiniTableField* field,
515
- wireval* val, int op) {
383
+ static const char* _upb_Decoder_DecodeToArray(upb_Decoder* d, const char* ptr,
384
+ upb_Message* msg,
385
+ const upb_MiniTableField* field,
386
+ wireval* val, int op) {
516
387
  upb_Array** arrp = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
517
388
  upb_Array* arr = *arrp;
518
389
  void* mem;
@@ -534,29 +405,36 @@ static const char* _upb_Decoder_DecodeToArray(
534
405
  arr->UPB_PRIVATE(size)++;
535
406
  memcpy(mem, val, 1 << op);
536
407
  return ptr;
537
- case kUpb_DecodeOp_String:
538
- _upb_Decoder_VerifyUtf8(d, ptr, val->size);
539
- /* Fallthrough. */
408
+ case kUpb_DecodeOp_String: {
409
+ /* Append string. */
410
+ upb_StringView* str = (upb_StringView*)upb_Array_MutableDataPtr(arr) +
411
+ arr->UPB_PRIVATE(size);
412
+ ptr = _upb_Decoder_ReadString2(d, ptr, val->size, str,
413
+ /*validate_utf8=*/true);
414
+ arr->UPB_PRIVATE(size)++;
415
+ return ptr;
416
+ }
540
417
  case kUpb_DecodeOp_Bytes: {
541
418
  /* Append bytes. */
542
419
  upb_StringView* str = (upb_StringView*)upb_Array_MutableDataPtr(arr) +
543
420
  arr->UPB_PRIVATE(size);
421
+ ptr = _upb_Decoder_ReadString2(d, ptr, val->size, str,
422
+ /*validate_utf8=*/false);
544
423
  arr->UPB_PRIVATE(size)++;
545
- return _upb_Decoder_ReadString(d, ptr, val->size, str);
424
+ return ptr;
546
425
  }
547
426
  case kUpb_DecodeOp_SubMessage: {
548
427
  /* Append submessage / group. */
549
- upb_TaggedMessagePtr* target = UPB_PTR_AT(
550
- upb_Array_MutableDataPtr(arr), arr->UPB_PRIVATE(size) * sizeof(void*),
551
- upb_TaggedMessagePtr);
552
- upb_Message* submsg = _upb_Decoder_NewSubMessage(d, subs, field, target);
428
+ upb_Message** target =
429
+ UPB_PTR_AT(upb_Array_MutableDataPtr(arr),
430
+ arr->UPB_PRIVATE(size) * sizeof(void*), upb_Message*);
431
+ upb_Message* submsg = _upb_Decoder_NewSubMessage(d, field, target);
553
432
  arr->UPB_PRIVATE(size)++;
554
433
  if (UPB_UNLIKELY(field->UPB_PRIVATE(descriptortype) ==
555
434
  kUpb_FieldType_Group)) {
556
- return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
435
+ return _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, field);
557
436
  } else {
558
- return _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
559
- val->size);
437
+ return _upb_Decoder_DecodeSubMessage(d, ptr, submsg, field, val->size);
560
438
  }
561
439
  }
562
440
  case OP_FIXPCK_LG2(2):
@@ -569,7 +447,7 @@ static const char* _upb_Decoder_DecodeToArray(
569
447
  return _upb_Decoder_DecodeVarintPacked(d, ptr, arr, val, field,
570
448
  op - OP_VARPCK_LG2(0));
571
449
  case kUpb_DecodeOp_PackedEnum:
572
- return _upb_Decoder_DecodeEnumPacked(d, ptr, msg, arr, subs, field, val);
450
+ return _upb_Decoder_DecodeEnumPacked(d, ptr, msg, arr, field, val);
573
451
  default:
574
452
  UPB_UNREACHABLE();
575
453
  }
@@ -607,7 +485,7 @@ static upb_Map* _upb_Decoder_CreateMap(upb_Decoder* d,
607
485
  UPB_ASSERT(key_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntry, k));
608
486
  UPB_ASSERT(val_field->UPB_PRIVATE(offset) == offsetof(upb_MapEntry, v));
609
487
  upb_Map* ret = _upb_Map_New(&d->arena, key_size, val_size);
610
- if (!ret) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
488
+ if (!ret) upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
611
489
  return ret;
612
490
  }
613
491
 
@@ -619,7 +497,7 @@ UPB_NOINLINE static void _upb_Decoder_AddMapEntryUnknown(
619
497
  upb_EncodeStatus status =
620
498
  upb_Encode(ent_msg, entry, 0, &d->arena, &buf, &size);
621
499
  if (status != kUpb_EncodeStatus_Ok) {
622
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
500
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
623
501
  }
624
502
  char delim_buf[2 * kUpb_Decoder_EncodeVarint32MaxSize];
625
503
  char* delim_end = delim_buf;
@@ -633,19 +511,19 @@ UPB_NOINLINE static void _upb_Decoder_AddMapEntryUnknown(
633
511
  };
634
512
 
635
513
  if (!UPB_PRIVATE(_upb_Message_AddUnknownV)(msg, &d->arena, unknown, 2)) {
636
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
514
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
637
515
  }
638
516
  }
639
517
 
640
- static const char* _upb_Decoder_DecodeToMap(
641
- upb_Decoder* d, const char* ptr, upb_Message* msg,
642
- const upb_MiniTableSubInternal* subs, const upb_MiniTableField* field,
643
- wireval* val) {
518
+ static const char* _upb_Decoder_DecodeToMap(upb_Decoder* d, const char* ptr,
519
+ upb_Message* msg,
520
+ const upb_MiniTableField* field,
521
+ wireval* val) {
644
522
  upb_Map** map_p = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), upb_Map*);
645
523
  upb_Map* map = *map_p;
646
524
  upb_MapEntry ent;
647
525
  UPB_ASSERT(upb_MiniTableField_Type(field) == kUpb_FieldType_Message);
648
- const upb_MiniTable* entry = _upb_MiniTableSubs_MessageByField(subs, field);
526
+ const upb_MiniTable* entry = upb_MiniTable_GetSubMessageTable(field);
649
527
 
650
528
  UPB_ASSERT(entry);
651
529
  UPB_ASSERT(entry->UPB_PRIVATE(field_count) == 2);
@@ -660,25 +538,38 @@ static const char* _upb_Decoder_DecodeToMap(
660
538
  // Parse map entry.
661
539
  memset(&ent, 0, sizeof(ent));
662
540
 
663
- if (entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
541
+ bool value_is_message =
542
+ entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
664
543
  kUpb_FieldType_Message ||
665
544
  entry->UPB_PRIVATE(fields)[1].UPB_PRIVATE(descriptortype) ==
666
- kUpb_FieldType_Group) {
545
+ kUpb_FieldType_Group;
546
+ const upb_MiniTable* sub_table =
547
+ value_is_message
548
+ ? upb_MiniTable_GetSubMessageTable(&entry->UPB_PRIVATE(fields)[1])
549
+ : NULL;
550
+ upb_Message* sub_msg = NULL;
551
+
552
+ if (sub_table) {
667
553
  // Create proactively to handle the case where it doesn't appear.
668
- upb_TaggedMessagePtr msg;
669
- _upb_Decoder_NewSubMessage(d, entry->UPB_PRIVATE(subs),
670
- &entry->UPB_PRIVATE(fields)[1], &msg);
671
- ent.v.val = upb_value_uintptr(msg);
554
+ _upb_Decoder_NewSubMessage(d, &entry->UPB_PRIVATE(fields)[1], &sub_msg);
555
+ ent.v.val = upb_value_ptr(sub_msg);
556
+ }
557
+
558
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, &ent.message, field, val->size);
559
+
560
+ if (sub_msg && sub_table->UPB_PRIVATE(required_count)) {
561
+ // If the map entry did not contain a value on the wire, `sub_msg` is an
562
+ // empty message; we must check if it is missing any required fields. If the
563
+ // value was present, this check is redundant but harmless.
564
+ _upb_Decoder_CheckRequired(d, ptr, sub_msg, sub_table);
672
565
  }
673
566
 
674
- ptr = _upb_Decoder_DecodeSubMessage(d, ptr, &ent.message, subs, field,
675
- val->size);
676
567
  if (upb_Message_HasUnknown(&ent.message)) {
677
568
  _upb_Decoder_AddMapEntryUnknown(d, msg, field, &ent.message, entry);
678
569
  } else {
679
570
  if (_upb_Map_Insert(map, &ent.k, map->key_size, &ent.v, map->val_size,
680
571
  &d->arena) == kUpb_MapInsertStatus_OutOfMemory) {
681
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
572
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
682
573
  }
683
574
  }
684
575
  return ptr;
@@ -686,8 +577,7 @@ static const char* _upb_Decoder_DecodeToMap(
686
577
 
687
578
  static const char* _upb_Decoder_DecodeToSubMessage(
688
579
  upb_Decoder* d, const char* ptr, upb_Message* msg,
689
- const upb_MiniTableSubInternal* subs, const upb_MiniTableField* field,
690
- wireval* val, int op) {
580
+ const upb_MiniTableField* field, wireval* val, int op) {
691
581
  void* mem = UPB_PTR_AT(msg, field->UPB_PRIVATE(offset), void);
692
582
  int type = field->UPB_PRIVATE(descriptortype);
693
583
 
@@ -707,26 +597,22 @@ static const char* _upb_Decoder_DecodeToSubMessage(
707
597
  // Store into message.
708
598
  switch (op) {
709
599
  case kUpb_DecodeOp_SubMessage: {
710
- upb_TaggedMessagePtr* submsgp = mem;
711
- upb_Message* submsg;
712
- if (*submsgp) {
713
- submsg = _upb_Decoder_ReuseSubMessage(d, subs, field, submsgp);
714
- } else {
715
- submsg = _upb_Decoder_NewSubMessage(d, subs, field, submsgp);
716
- }
600
+ upb_Message** submsgp = mem;
601
+ upb_Message* submsg = *submsgp;
602
+ if (!submsg) submsg = _upb_Decoder_NewSubMessage(d, field, submsgp);
717
603
  if (UPB_UNLIKELY(type == kUpb_FieldType_Group)) {
718
- ptr = _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, subs, field);
604
+ ptr = _upb_Decoder_DecodeKnownGroup(d, ptr, submsg, field);
719
605
  } else {
720
- ptr = _upb_Decoder_DecodeSubMessage(d, ptr, submsg, subs, field,
721
- val->size);
606
+ ptr = _upb_Decoder_DecodeSubMessage(d, ptr, submsg, field, val->size);
722
607
  }
723
608
  break;
724
609
  }
725
610
  case kUpb_DecodeOp_String:
726
- _upb_Decoder_VerifyUtf8(d, ptr, val->size);
727
- /* Fallthrough. */
611
+ return _upb_Decoder_ReadString2(d, ptr, val->size, mem,
612
+ /*validate_utf8=*/true);
728
613
  case kUpb_DecodeOp_Bytes:
729
- return _upb_Decoder_ReadString(d, ptr, val->size, mem);
614
+ return _upb_Decoder_ReadString2(d, ptr, val->size, mem,
615
+ /*validate_utf8=*/false);
730
616
  case kUpb_DecodeOp_Scalar8Byte:
731
617
  memcpy(mem, val, 8);
732
618
  break;
@@ -743,31 +629,6 @@ static const char* _upb_Decoder_DecodeToSubMessage(
743
629
  return ptr;
744
630
  }
745
631
 
746
- static const char* upb_Decoder_SkipField(upb_Decoder* d, const char* ptr,
747
- uint32_t tag) {
748
- int field_number = tag >> 3;
749
- int wire_type = tag & 7;
750
- switch (wire_type) {
751
- case kUpb_WireType_Varint: {
752
- uint64_t val;
753
- return _upb_Decoder_DecodeVarint(d, ptr, &val);
754
- }
755
- case kUpb_WireType_64Bit:
756
- return ptr + 8;
757
- case kUpb_WireType_32Bit:
758
- return ptr + 4;
759
- case kUpb_WireType_Delimited: {
760
- uint32_t size;
761
- ptr = upb_Decoder_DecodeSize(d, ptr, &size);
762
- return ptr + size;
763
- }
764
- case kUpb_WireType_StartGroup:
765
- return _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
766
- default:
767
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
768
- }
769
- }
770
-
771
632
  enum {
772
633
  kStartItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_StartGroup),
773
634
  kEndItemTag = ((kUpb_MsgSet_Item << 3) | kUpb_WireType_EndGroup),
@@ -781,15 +642,22 @@ static void upb_Decoder_AddKnownMessageSetItem(
781
642
  upb_Extension* ext =
782
643
  UPB_PRIVATE(_upb_Message_GetOrCreateExtension)(msg, item_mt, &d->arena);
783
644
  if (UPB_UNLIKELY(!ext)) {
784
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
645
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
785
646
  }
647
+ upb_Message** submsgp = (upb_Message**)&ext->data.msg_val;
786
648
  upb_Message* submsg = _upb_Decoder_NewSubMessage2(
787
649
  d, ext->ext->UPB_PRIVATE(sub).UPB_PRIVATE(submsg),
788
- &ext->ext->UPB_PRIVATE(field), &ext->data.tagged_msg_val);
650
+ &ext->ext->UPB_PRIVATE(field), submsgp);
651
+ // upb_Decode_LimitDepth() takes uint32_t, d->depth - 1 can not be negative.
652
+ if (d->depth <= 1) {
653
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_MaxDepthExceeded);
654
+ }
789
655
  upb_DecodeStatus status = upb_Decode(
790
656
  data, size, submsg, upb_MiniTableExtension_GetSubMessage(item_mt),
791
- d->extreg, d->options, &d->arena);
792
- if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
657
+ d->extreg, upb_Decode_LimitDepth(d->options, d->depth - 1), &d->arena);
658
+ if (status != kUpb_DecodeStatus_Ok) {
659
+ upb_ErrorHandler_ThrowError(&d->err, status);
660
+ }
793
661
  }
794
662
 
795
663
  static void upb_Decoder_AddUnknownMessageSetItem(upb_Decoder* d,
@@ -814,7 +682,7 @@ static void upb_Decoder_AddUnknownMessageSetItem(upb_Decoder* d,
814
682
  {split, end - split},
815
683
  };
816
684
  if (!UPB_PRIVATE(_upb_Message_AddUnknownV)(msg, &d->arena, unknown, 3)) {
817
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
685
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
818
686
  }
819
687
  }
820
688
 
@@ -841,15 +709,15 @@ static const char* upb_Decoder_DecodeMessageSetItem(
841
709
  kUpb_HavePayload = 1 << 1,
842
710
  } StateMask;
843
711
  StateMask state_mask = 0;
844
- while (!_upb_Decoder_IsDone(d, &ptr)) {
712
+ while (!upb_EpsCopyInputStream_IsDone(EPS(d), &ptr)) {
845
713
  uint32_t tag;
846
- ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
714
+ ptr = upb_WireReader_ReadTag(ptr, &tag, EPS(d));
847
715
  switch (tag) {
848
716
  case kEndItemTag:
849
717
  return ptr;
850
718
  case kTypeIdTag: {
851
719
  uint64_t tmp;
852
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &tmp);
720
+ ptr = upb_WireReader_ReadVarint(ptr, &tmp, EPS(d));
853
721
  if (state_mask & kUpb_HaveId) break; // Ignore dup.
854
722
  state_mask |= kUpb_HaveId;
855
723
  type_id = tmp;
@@ -861,27 +729,31 @@ static const char* upb_Decoder_DecodeMessageSetItem(
861
729
  }
862
730
  case kMessageTag: {
863
731
  uint32_t size;
732
+ upb_StringView sv;
864
733
  ptr = upb_Decoder_DecodeSize(d, ptr, &size);
865
- const char* data = upb_EpsCopyInputStream_GetInputPtr(&d->input, ptr);
866
- ptr += size;
734
+ ptr = upb_EpsCopyInputStream_ReadStringAlwaysAlias(&d->input, ptr, size,
735
+ &sv);
736
+ if (!ptr) {
737
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
738
+ }
867
739
  if (state_mask & kUpb_HavePayload) break; // Ignore dup.
868
740
  state_mask |= kUpb_HavePayload;
869
741
  if (state_mask & kUpb_HaveId) {
870
- upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, data, size);
742
+ upb_Decoder_AddMessageSetItem(d, msg, layout, type_id, sv.data,
743
+ sv.size);
871
744
  } else {
872
745
  // Out of order, we must preserve the payload.
873
- preserved.data = data;
874
- preserved.size = size;
746
+ preserved = sv;
875
747
  }
876
748
  break;
877
749
  }
878
750
  default:
879
751
  // We do not preserve unexpected fields inside a message set item.
880
- ptr = upb_Decoder_SkipField(d, ptr, tag);
752
+ ptr = _upb_WireReader_SkipValue(ptr, tag, d->depth, &d->input);
881
753
  break;
882
754
  }
883
755
  }
884
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
756
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
885
757
  }
886
758
 
887
759
  static upb_MiniTableField upb_Decoder_FieldNotFoundField = {
@@ -889,7 +761,7 @@ static upb_MiniTableField upb_Decoder_FieldNotFoundField = {
889
761
 
890
762
  UPB_NOINLINE const upb_MiniTableField* _upb_Decoder_FindExtensionField(
891
763
  upb_Decoder* d, const upb_MiniTable* t, uint32_t field_number, int ext_mode,
892
- int wire_type) {
764
+ uint32_t wire_type) {
893
765
  // Treat a message set as an extendable message if it is a delimited field.
894
766
  // This provides compatibility with encoders that are unaware of message
895
767
  // sets and serialize them as normal extensions.
@@ -912,9 +784,8 @@ UPB_NOINLINE const upb_MiniTableField* _upb_Decoder_FindExtensionField(
912
784
  static const upb_MiniTableField* _upb_Decoder_FindField(upb_Decoder* d,
913
785
  const upb_MiniTable* t,
914
786
  uint32_t field_number,
915
- int wire_type) {
916
- if (t == NULL) return &upb_Decoder_FieldNotFoundField;
917
-
787
+ uint32_t wire_type) {
788
+ UPB_ASSERT(t);
918
789
  const upb_MiniTableField* field =
919
790
  upb_MiniTable_FindFieldByNumber(t, field_number);
920
791
  if (field) return field;
@@ -959,12 +830,8 @@ void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
959
830
  const upb_MiniTableField* field, int* op) {
960
831
  // If sub-message is not linked, treat as unknown.
961
832
  if (field->UPB_PRIVATE(mode) & kUpb_LabelFlags_IsExtension) return;
962
- const upb_MiniTable* mt_sub =
963
- _upb_MiniTableSubs_MessageByField(mt->UPB_PRIVATE(subs), field);
964
- if ((d->options & kUpb_DecodeOption_ExperimentalAllowUnlinked) ||
965
- !UPB_PRIVATE(_upb_MiniTable_IsEmpty)(mt_sub)) {
966
- return;
967
- }
833
+ const upb_MiniTable* mt_sub = upb_MiniTable_GetSubMessageTable(field);
834
+ if (mt_sub != NULL) return; // Normal case, sub-message is linked.
968
835
  #ifndef NDEBUG
969
836
  const upb_MiniTableField* oneof = upb_MiniTable_GetOneof(mt, field);
970
837
  if (oneof) {
@@ -972,9 +839,7 @@ void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
972
839
  // unlinked.
973
840
  do {
974
841
  UPB_ASSERT(upb_MiniTableField_CType(oneof) == kUpb_CType_Message);
975
- const upb_MiniTable* oneof_sub =
976
- *mt->UPB_PRIVATE(subs)[oneof->UPB_PRIVATE(submsg_index)].UPB_PRIVATE(
977
- submsg);
842
+ const upb_MiniTable* oneof_sub = upb_MiniTable_GetSubMessageTable(oneof);
978
843
  UPB_ASSERT(!oneof_sub);
979
844
  } while (upb_MiniTable_NextOneofField(mt, &oneof));
980
845
  }
@@ -985,9 +850,10 @@ void _upb_Decoder_CheckUnlinked(upb_Decoder* d, const upb_MiniTable* mt,
985
850
  UPB_FORCEINLINE
986
851
  void _upb_Decoder_MaybeVerifyUtf8(upb_Decoder* d,
987
852
  const upb_MiniTableField* field, int* op) {
988
- if ((field->UPB_ONLYBITS(mode) & kUpb_LabelFlags_IsAlternate) &&
989
- UPB_UNLIKELY(d->options & kUpb_DecodeOption_AlwaysValidateUtf8))
853
+ UPB_ASSUME(field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bytes);
854
+ if (_upb_Decoder_FieldRequiresUtf8Validation(d, field)) {
990
855
  *op = kUpb_DecodeOp_String;
856
+ }
991
857
  }
992
858
 
993
859
  static int _upb_Decoder_GetDelimitedOp(upb_Decoder* d, const upb_MiniTable* mt,
@@ -1057,7 +923,8 @@ UPB_FORCEINLINE
1057
923
  const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
1058
924
  const upb_MiniTable* mt,
1059
925
  const upb_MiniTableField* field,
1060
- int wire_type, wireval* val, int* op) {
926
+ uint32_t wire_type, wireval* val,
927
+ int* op) {
1061
928
  static const unsigned kFixed32OkMask = (1 << kUpb_FieldType_Float) |
1062
929
  (1 << kUpb_FieldType_Fixed32) |
1063
930
  (1 << kUpb_FieldType_SFixed32);
@@ -1068,17 +935,14 @@ const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
1068
935
 
1069
936
  switch (wire_type) {
1070
937
  case kUpb_WireType_Varint:
1071
- ptr = _upb_Decoder_DecodeVarint(d, ptr, &val->uint64_val);
938
+ ptr = upb_WireReader_ReadVarint(ptr, &val->uint64_val, EPS(d));
1072
939
  if (upb_MiniTableField_IsClosedEnum(field)) {
1073
- const upb_MiniTableEnum* e =
1074
- upb_MiniTableField_IsExtension(field)
1075
- ? upb_MiniTableExtension_GetSubEnum(
1076
- (const upb_MiniTableExtension*)field)
1077
- : upb_MiniTable_GetSubEnumTable(mt, field);
940
+ const upb_MiniTableEnum* e = upb_MiniTable_GetSubEnumTable(field);
1078
941
  if (!upb_MiniTableEnum_CheckValue(e, val->uint64_val)) {
1079
942
  *op = kUpb_DecodeOp_UnknownField;
1080
943
  return ptr;
1081
944
  }
945
+ _upb_Decoder_MungeInt32(val);
1082
946
  } else {
1083
947
  _upb_Decoder_Munge(field, val);
1084
948
  }
@@ -1115,18 +979,15 @@ const char* _upb_Decoder_DecodeWireValue(upb_Decoder* d, const char* ptr,
1115
979
  default:
1116
980
  break;
1117
981
  }
1118
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
982
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
1119
983
  }
1120
984
 
1121
985
  UPB_FORCEINLINE
1122
986
  const char* _upb_Decoder_DecodeKnownField(upb_Decoder* d, const char* ptr,
1123
987
  upb_Message* msg,
1124
- const upb_MiniTable* layout,
1125
988
  const upb_MiniTableField* field,
1126
989
  int op, wireval* val) {
1127
- const upb_MiniTableSubInternal* subs = layout->UPB_PRIVATE(subs);
1128
990
  uint8_t mode = field->UPB_PRIVATE(mode);
1129
- upb_MiniTableSubInternal ext_sub;
1130
991
 
1131
992
  if (UPB_UNLIKELY(mode & kUpb_LabelFlags_IsExtension)) {
1132
993
  const upb_MiniTableExtension* ext_layout =
@@ -1134,133 +995,81 @@ const char* _upb_Decoder_DecodeKnownField(upb_Decoder* d, const char* ptr,
1134
995
  upb_Extension* ext = UPB_PRIVATE(_upb_Message_GetOrCreateExtension)(
1135
996
  msg, ext_layout, &d->arena);
1136
997
  if (UPB_UNLIKELY(!ext)) {
1137
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
998
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
1138
999
  }
1139
1000
  d->original_msg = msg;
1140
1001
  msg = &ext->data.UPB_PRIVATE(ext_msg_val);
1141
- if (upb_MiniTableField_IsSubMessage(&ext->ext->UPB_PRIVATE(field))) {
1142
- ext_sub.UPB_PRIVATE(submsg) =
1143
- &ext->ext->UPB_PRIVATE(sub).UPB_PRIVATE(submsg);
1144
- } else {
1145
- ext_sub.UPB_PRIVATE(subenum) =
1146
- ext->ext->UPB_PRIVATE(sub).UPB_PRIVATE(subenum);
1147
- }
1148
- subs = &ext_sub;
1149
1002
  }
1150
1003
 
1151
1004
  switch (mode & kUpb_FieldMode_Mask) {
1152
1005
  case kUpb_FieldMode_Array:
1153
- return _upb_Decoder_DecodeToArray(d, ptr, msg, subs, field, val, op);
1006
+ return _upb_Decoder_DecodeToArray(d, ptr, msg, field, val, op);
1154
1007
  case kUpb_FieldMode_Map:
1155
- return _upb_Decoder_DecodeToMap(d, ptr, msg, subs, field, val);
1008
+ return _upb_Decoder_DecodeToMap(d, ptr, msg, field, val);
1156
1009
  case kUpb_FieldMode_Scalar:
1157
- return _upb_Decoder_DecodeToSubMessage(d, ptr, msg, subs, field, val, op);
1010
+ return _upb_Decoder_DecodeToSubMessage(d, ptr, msg, field, val, op);
1158
1011
  default:
1159
1012
  UPB_UNREACHABLE();
1160
1013
  }
1161
1014
  }
1162
1015
 
1163
- static const char* _upb_Decoder_DecodeUnknownField(upb_Decoder* d,
1164
- const char* ptr,
1165
- upb_Message* msg,
1166
- int field_number,
1167
- int wire_type, wireval val) {
1168
- if (field_number == 0) _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_Malformed);
1169
-
1170
- // Since unknown fields are the uncommon case, we do a little extra work here
1171
- // to walk backwards through the buffer to find the field start. This frees
1172
- // up a register in the fast paths (when the field is known), which leads to
1173
- // significant speedups in benchmarks. Note that ptr may point into the slop
1174
- // space, beyond the normal end of the input buffer.
1175
- const char* start = ptr;
1016
+ static const char* _upb_Decoder_DecodeUnknownField(
1017
+ upb_Decoder* d, const char* ptr, upb_Message* msg, uint32_t field_number,
1018
+ uint32_t wire_type, wireval val, const char* start) {
1019
+ if (field_number == 0) {
1020
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
1021
+ }
1176
1022
 
1177
- if (wire_type == kUpb_WireType_Delimited) ptr += val.size;
1178
- if (msg) {
1179
- switch (wire_type) {
1180
- case kUpb_WireType_Varint:
1181
- case kUpb_WireType_Delimited:
1182
- // Skip the last byte
1183
- start--;
1184
- // Skip bytes until we encounter the final byte of the tag varint.
1185
- while (start[-1] & 0x80) start--;
1186
- break;
1187
- case kUpb_WireType_32Bit:
1188
- start -= 4;
1189
- break;
1190
- case kUpb_WireType_64Bit:
1191
- start -= 8;
1192
- break;
1193
- default:
1194
- break;
1195
- }
1023
+ upb_EpsCopyInputStream_StartCapture(&d->input, start);
1196
1024
 
1197
- assert(start == d->debug_valstart);
1198
- {
1199
- // The varint parser does not enforce that integers are encoded with their
1200
- // minimum size; for example the value 1 could be encoded with three
1201
- // bytes: 0x81, 0x80, 0x00. These unnecessary trailing zeroes mean that we
1202
- // cannot skip backwards by the minimum encoded size of the tag; and
1203
- // unlike the loop for delimited or varint fields, we can't stop at a
1204
- // sentinel value because anything can precede a tag. Instead, parse back
1205
- // one byte at a time until we read the same tag value that was parsed
1206
- // earlier.
1207
- uint32_t tag = ((uint32_t)field_number << 3) | wire_type;
1208
- uint32_t seen = 0;
1209
- do {
1210
- start--;
1211
- seen <<= 7;
1212
- seen |= *start & 0x7f;
1213
- } while (seen != tag);
1214
- }
1215
- assert(start == d->debug_tagstart);
1025
+ if (wire_type == kUpb_WireType_Delimited) {
1026
+ upb_StringView sv;
1027
+ ptr = upb_EpsCopyInputStream_ReadStringEphemeral(&d->input, ptr, val.size,
1028
+ &sv);
1029
+ if (!ptr) upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_Malformed);
1030
+ } else if (wire_type == kUpb_WireType_StartGroup) {
1031
+ ptr = UPB_PRIVATE(_upb_WireReader_SkipGroup)(ptr, field_number << 3,
1032
+ d->depth, &d->input);
1033
+ }
1216
1034
 
1217
- const char* input_start =
1218
- upb_EpsCopyInputStream_GetInputPtr(&d->input, start);
1219
- if (wire_type == kUpb_WireType_StartGroup) {
1220
- ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
1221
- }
1222
- // Normally, bounds checks for fixed or varint fields are performed after
1223
- // the field is parsed; it's OK for the field to overrun the end of the
1224
- // buffer, because it'll just read into slop space. However, because this
1225
- // path reads bytes from the input buffer rather than the patch buffer,
1226
- // bounds checks are needed before adding the unknown field.
1227
- _upb_Decoder_IsDone(d, &ptr);
1228
- const char* input_ptr = upb_EpsCopyInputStream_GetInputPtr(&d->input, ptr);
1229
- if (!UPB_PRIVATE(_upb_Message_AddUnknown)(
1230
- msg, input_start, input_ptr - input_start, &d->arena,
1231
- d->input.aliasing ? d->input.buffer_start : NULL)) {
1232
- _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
1035
+ upb_StringView sv;
1036
+ upb_EpsCopyInputStream_EndCapture(&d->input, ptr, &sv);
1037
+
1038
+ upb_AddUnknownMode mode = kUpb_AddUnknown_Copy;
1039
+ if (d->options & kUpb_DecodeOption_AliasString) {
1040
+ if (sv.data != d->input.buffer_start) {
1041
+ // If the data is not from the beginning of the input buffer, then we can
1042
+ // safely attempt to coalesce this region with the previous one.
1043
+ mode = kUpb_AddUnknown_AliasAllowMerge;
1044
+ } else {
1045
+ mode = kUpb_AddUnknown_Alias;
1233
1046
  }
1234
- } else if (wire_type == kUpb_WireType_StartGroup) {
1235
- ptr = _upb_Decoder_DecodeUnknownGroup(d, ptr, field_number);
1236
1047
  }
1048
+
1049
+ if (!UPB_PRIVATE(_upb_Message_AddUnknown)(msg, sv.data, sv.size, &d->arena,
1050
+ mode)) {
1051
+ upb_ErrorHandler_ThrowError(&d->err, kUpb_DecodeStatus_OutOfMemory);
1052
+ }
1053
+
1237
1054
  return ptr;
1238
1055
  }
1239
1056
 
1240
1057
  UPB_FORCEINLINE
1241
1058
  const char* _upb_Decoder_DecodeFieldTag(upb_Decoder* d, const char* ptr,
1242
- int* field_number, int* wire_type) {
1243
- #ifndef NDEBUG
1244
- d->debug_tagstart = ptr;
1245
- #endif
1246
-
1059
+ uint32_t* field_number,
1060
+ uint32_t* wire_type) {
1247
1061
  uint32_t tag;
1248
1062
  UPB_ASSERT(ptr < d->input.limit_ptr);
1249
- ptr = _upb_Decoder_DecodeTag(d, ptr, &tag);
1063
+ ptr = upb_WireReader_ReadTag(ptr, &tag, EPS(d));
1250
1064
  *field_number = tag >> 3;
1251
1065
  *wire_type = tag & 7;
1252
1066
  return ptr;
1253
1067
  }
1254
1068
 
1255
1069
  UPB_FORCEINLINE
1256
- const char* _upb_Decoder_DecodeFieldData(upb_Decoder* d, const char* ptr,
1257
- upb_Message* msg,
1258
- const upb_MiniTable* mt,
1259
- int field_number, int wire_type) {
1260
- #ifndef NDEBUG
1261
- d->debug_valstart = ptr;
1262
- #endif
1263
-
1070
+ const char* _upb_Decoder_DecodeFieldData(
1071
+ upb_Decoder* d, const char* ptr, upb_Message* msg, const upb_MiniTable* mt,
1072
+ uint32_t field_number, uint32_t wire_type, const char* start) {
1264
1073
  int op;
1265
1074
  wireval val;
1266
1075
 
@@ -1269,12 +1078,12 @@ const char* _upb_Decoder_DecodeFieldData(upb_Decoder* d, const char* ptr,
1269
1078
  ptr = _upb_Decoder_DecodeWireValue(d, ptr, mt, field, wire_type, &val, &op);
1270
1079
 
1271
1080
  if (op >= 0) {
1272
- return _upb_Decoder_DecodeKnownField(d, ptr, msg, mt, field, op, &val);
1081
+ return _upb_Decoder_DecodeKnownField(d, ptr, msg, field, op, &val);
1273
1082
  } else {
1274
1083
  switch (op) {
1275
1084
  case kUpb_DecodeOp_UnknownField:
1276
1085
  return _upb_Decoder_DecodeUnknownField(d, ptr, msg, field_number,
1277
- wire_type, val);
1086
+ wire_type, val, start);
1278
1087
  case kUpb_DecodeOp_MessageSetItem:
1279
1088
  return upb_Decoder_DecodeMessageSetItem(d, ptr, msg, mt);
1280
1089
  default:
@@ -1292,9 +1101,10 @@ UPB_FORCEINLINE
1292
1101
  const char* _upb_Decoder_DecodeFieldNoFast(upb_Decoder* d, const char* ptr,
1293
1102
  upb_Message* msg,
1294
1103
  const upb_MiniTable* mt) {
1295
- int field_number;
1296
- int wire_type;
1104
+ uint32_t field_number;
1105
+ uint32_t wire_type;
1297
1106
 
1107
+ const char* start = ptr;
1298
1108
  ptr = _upb_Decoder_DecodeFieldTag(d, ptr, &field_number, &wire_type);
1299
1109
 
1300
1110
  if (wire_type == kUpb_WireType_EndGroup) {
@@ -1302,30 +1112,60 @@ const char* _upb_Decoder_DecodeFieldNoFast(upb_Decoder* d, const char* ptr,
1302
1112
  return _upb_Decoder_EndMessage(d, ptr);
1303
1113
  }
1304
1114
 
1305
- ptr = _upb_Decoder_DecodeFieldData(d, ptr, msg, mt, field_number, wire_type);
1115
+ ptr = _upb_Decoder_DecodeFieldData(d, ptr, msg, mt, field_number, wire_type,
1116
+ start);
1306
1117
  _upb_Decoder_Trace(d, 'M');
1307
1118
  return ptr;
1308
1119
  }
1309
1120
 
1121
+ UPB_FORCEINLINE
1122
+ bool _upb_Decoder_TryDecodeMessageFast(upb_Decoder* d, const char** ptr,
1123
+ upb_Message* msg,
1124
+ const upb_MiniTable* mt,
1125
+ uint64_t last_field_index,
1126
+ uint64_t data) {
1127
+ #ifdef UPB_ENABLE_FASTTABLE
1128
+ if (mt->UPB_PRIVATE(table_mask) == (unsigned char)-1 ||
1129
+ (d->options & kUpb_DecodeOption_DisableFastTable)) {
1130
+ // Fast table is unavailable or disabled.
1131
+ return false;
1132
+ }
1133
+
1134
+ intptr_t table = decode_totable(mt);
1135
+ const char* start = *ptr;
1136
+ char* trace_next = _upb_Decoder_TraceNext(d);
1137
+
1138
+ *ptr = upb_DecodeFast_Dispatch(d, *ptr, msg, table, 0, 0);
1139
+
1140
+ if (d->message_is_done) {
1141
+ // The entire message was successfully parsed fast.
1142
+ return true;
1143
+ }
1144
+
1145
+ // *ptr now points to the beginning of a field that could not be parsed fast.
1146
+ // It's possible that some fields were parsed fast, in which case *ptr will
1147
+ // have been updated. However, it's also possible that the very first field
1148
+ // encountered could not be parsed fast, in which case *ptr will be unchanged.
1149
+ //
1150
+ // If the fast decoder consumed any data, it must have emitted at least
1151
+ // one 'F' event into the trace buffer (in addition to the 'D' event
1152
+ // that is always emitted).
1153
+ UPB_ASSERT(_upb_Decoder_TracePtr(d) != trace_next || *ptr == start);
1154
+ _upb_Decoder_Trace(d, '<');
1155
+ #endif
1156
+ return false;
1157
+ }
1158
+
1310
1159
  UPB_FORCEINLINE
1311
1160
  const char* _upb_Decoder_DecodeField(upb_Decoder* d, const char* ptr,
1312
1161
  upb_Message* msg, const upb_MiniTable* mt,
1313
1162
  uint64_t last_field_index, uint64_t data) {
1314
- #ifdef UPB_ENABLE_FASTTABLE
1315
- if (mt && mt->UPB_PRIVATE(table_mask) != (unsigned char)-1 &&
1316
- !(d->options & kUpb_DecodeOption_DisableFastTable)) {
1317
- intptr_t table = decode_totable(mt);
1318
- ptr = upb_DecodeFast_Dispatch(d, ptr, msg, table, 0, 0);
1319
- if (d->message_is_done) return ptr;
1320
- _upb_Decoder_Trace(d, '<');
1321
- } else if (_upb_Decoder_IsDone(d, &ptr)) {
1163
+ if (_upb_Decoder_TryDecodeMessageFast(d, &ptr, msg, mt, last_field_index,
1164
+ data)) {
1165
+ return ptr;
1166
+ } else if (upb_EpsCopyInputStream_IsDone(EPS(d), &ptr)) {
1322
1167
  return _upb_Decoder_EndMessage(d, ptr);
1323
1168
  }
1324
- #else
1325
- if (_upb_Decoder_IsDone(d, &ptr)) {
1326
- return _upb_Decoder_EndMessage(d, ptr);
1327
- }
1328
- #endif
1329
1169
 
1330
1170
  return _upb_Decoder_DecodeFieldNoFast(d, ptr, msg, mt);
1331
1171
  }
@@ -1334,6 +1174,7 @@ UPB_NOINLINE
1334
1174
  const char* _upb_Decoder_DecodeMessage(upb_Decoder* d, const char* ptr,
1335
1175
  upb_Message* msg,
1336
1176
  const upb_MiniTable* mt) {
1177
+ UPB_ASSERT(mt);
1337
1178
  UPB_ASSERT(d->message_is_done == false);
1338
1179
 
1339
1180
  do {
@@ -1361,10 +1202,10 @@ static upb_DecodeStatus upb_Decoder_Decode(upb_Decoder* const decoder,
1361
1202
  upb_Message* const msg,
1362
1203
  const upb_MiniTable* const m,
1363
1204
  upb_Arena* const arena) {
1364
- if (UPB_SETJMP(decoder->err) == 0) {
1365
- decoder->status = _upb_Decoder_DecodeTop(decoder, buf, msg, m);
1205
+ if (UPB_SETJMP(decoder->err.buf) == 0) {
1206
+ decoder->err.code = _upb_Decoder_DecodeTop(decoder, buf, msg, m);
1366
1207
  } else {
1367
- UPB_ASSERT(decoder->status != kUpb_DecodeStatus_Ok);
1208
+ UPB_ASSERT(decoder->err.code != kUpb_DecodeStatus_Ok);
1368
1209
  }
1369
1210
 
1370
1211
  return upb_Decoder_Destroy(decoder, arena);
@@ -1452,8 +1293,6 @@ const char* upb_DecodeStatus_String(upb_DecodeStatus status) {
1452
1293
  return "Exceeded upb_DecodeOptions_MaxDepth";
1453
1294
  case kUpb_DecodeStatus_MissingRequired:
1454
1295
  return "Missing required field";
1455
- case kUpb_DecodeStatus_UnlinkedSubMessage:
1456
- return "Unlinked sub-message field was present";
1457
1296
  default:
1458
1297
  return "Unknown decode status";
1459
1298
  }