grpc 1.55.0 → 1.56.0.pre3

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

Potentially problematic release.


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

Files changed (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +50 -14
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -72,6 +72,7 @@ struct host_query
72
72
  struct ares_addrinfo *ai; /* store results between lookups */
73
73
  int remaining; /* number of DNS answers waiting for */
74
74
  int next_domain; /* next search domain to try */
75
+ int nodata_cnt; /* Track nodata responses to possibly override final result */
75
76
  };
76
77
 
77
78
  static const struct ares_addrinfo_hints default_hints = {
@@ -101,13 +102,15 @@ static const struct ares_addrinfo_node empty_addrinfo_node = {
101
102
 
102
103
  static const struct ares_addrinfo empty_addrinfo = {
103
104
  NULL, /* cnames */
104
- NULL /* nodes */
105
+ NULL, /* nodes */
106
+ NULL /* name */
105
107
  };
106
108
 
107
109
  /* forward declarations */
108
110
  static void host_callback(void *arg, int status, int timeouts,
109
111
  unsigned char *abuf, int alen);
110
112
  static int as_is_first(const struct host_query *hquery);
113
+ static int as_is_only(const struct host_query* hquery);
111
114
  static int next_dns_lookup(struct host_query *hquery);
112
115
 
113
116
  struct ares_addrinfo_cname *ares__malloc_addrinfo_cname()
@@ -281,9 +284,7 @@ static int fake_addrinfo(const char *name,
281
284
  void *arg)
282
285
  {
283
286
  struct ares_addrinfo_cname *cname;
284
- struct ares_addrinfo_node *node;
285
- ares_sockaddr addr;
286
- size_t addrlen;
287
+ int status = ARES_SUCCESS;
287
288
  int result = 0;
288
289
  int family = hints->ai_family;
289
290
  if (family == AF_INET || family == AF_INET6 || family == AF_UNSPEC)
@@ -304,62 +305,45 @@ static int fake_addrinfo(const char *name,
304
305
  }
305
306
  }
306
307
 
307
- memset(&addr, 0, sizeof(addr));
308
-
309
308
  /* if we don't have 3 dots, it is illegal
310
309
  * (although inet_pton doesn't think so).
311
310
  */
312
311
  if (numdots != 3 || !valid)
313
312
  result = 0;
314
313
  else
315
- result =
316
- (ares_inet_pton(AF_INET, name, &addr.sa4.sin_addr) < 1 ? 0 : 1);
317
-
318
- if (result)
319
314
  {
320
- family = addr.sa.sa_family = AF_INET;
321
- addr.sa4.sin_port = htons(port);
322
- addrlen = sizeof(addr.sa4);
315
+ struct in_addr addr4;
316
+ result = ares_inet_pton(AF_INET, name, &addr4) < 1 ? 0 : 1;
317
+ if (result)
318
+ {
319
+ status = ares_append_ai_node(AF_INET, port, 0, &addr4, &ai->nodes);
320
+ if (status != ARES_SUCCESS)
321
+ {
322
+ callback(arg, status, 0, NULL);
323
+ return 1;
324
+ }
325
+ }
323
326
  }
324
327
  }
325
328
 
326
- if (family == AF_INET6 || family == AF_UNSPEC)
329
+ if (!result && (family == AF_INET6 || family == AF_UNSPEC))
327
330
  {
328
- result =
329
- (ares_inet_pton(AF_INET6, name, &addr.sa6.sin6_addr) < 1 ? 0 : 1);
330
- addr.sa6.sin6_family = AF_INET6;
331
- addr.sa6.sin6_port = htons(port);
332
- addrlen = sizeof(addr.sa6);
331
+ struct ares_in6_addr addr6;
332
+ result = ares_inet_pton(AF_INET6, name, &addr6) < 1 ? 0 : 1;
333
+ if (result)
334
+ {
335
+ status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &ai->nodes);
336
+ if (status != ARES_SUCCESS)
337
+ {
338
+ callback(arg, status, 0, NULL);
339
+ return 1;
340
+ }
341
+ }
333
342
  }
334
343
 
335
344
  if (!result)
336
345
  return 0;
337
346
 
338
- node = ares__malloc_addrinfo_node();
339
- if (!node)
340
- {
341
- ares_freeaddrinfo(ai);
342
- callback(arg, ARES_ENOMEM, 0, NULL);
343
- return 1;
344
- }
345
-
346
- ai->nodes = node;
347
-
348
- node->ai_addr = ares_malloc(addrlen);
349
- if (!node->ai_addr)
350
- {
351
- ares_freeaddrinfo(ai);
352
- callback(arg, ARES_ENOMEM, 0, NULL);
353
- return 1;
354
- }
355
-
356
- node->ai_addrlen = (unsigned int)addrlen;
357
- node->ai_family = addr.sa.sa_family;
358
- if (addr.sa.sa_family == AF_INET)
359
- memcpy(node->ai_addr, &addr.sa4, sizeof(addr.sa4));
360
- else
361
- memcpy(node->ai_addr, &addr.sa6, sizeof(addr.sa6));
362
-
363
347
  if (hints->ai_flags & ARES_AI_CANONNAME)
364
348
  {
365
349
  cname = ares__append_addrinfo_cname(&ai->cnames);
@@ -380,8 +364,8 @@ static int fake_addrinfo(const char *name,
380
364
  }
381
365
  }
382
366
 
383
- node->ai_socktype = hints->ai_socktype;
384
- node->ai_protocol = hints->ai_protocol;
367
+ ai->nodes->ai_socktype = hints->ai_socktype;
368
+ ai->nodes->ai_protocol = hints->ai_protocol;
385
369
 
386
370
  callback(arg, ARES_SUCCESS, 0, ai);
387
371
  return 1;
@@ -400,19 +384,11 @@ static void end_hquery(struct host_query *hquery, int status)
400
384
  hquery->ai->nodes = sentinel.ai_next;
401
385
  }
402
386
  next = hquery->ai->nodes;
403
- /* Set port into each address (resolved separately). */
387
+
404
388
  while (next)
405
389
  {
406
390
  next->ai_socktype = hquery->hints.ai_socktype;
407
391
  next->ai_protocol = hquery->hints.ai_protocol;
408
- if (next->ai_family == AF_INET)
409
- {
410
- (CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr))->sin_port = htons(hquery->port);
411
- }
412
- else
413
- {
414
- (CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr))->sin6_port = htons(hquery->port);
415
- }
416
392
  next = next->ai_next;
417
393
  }
418
394
  }
@@ -428,16 +404,46 @@ static void end_hquery(struct host_query *hquery, int status)
428
404
  ares_free(hquery);
429
405
  }
430
406
 
407
+ static int is_localhost(const char *name)
408
+ {
409
+ /* RFC6761 6.3 says : The domain "localhost." and any names falling within ".localhost." */
410
+ size_t len;
411
+
412
+ if (name == NULL)
413
+ return 0;
414
+
415
+ if (strcmp(name, "localhost") == 0)
416
+ return 1;
417
+
418
+ len = strlen(name);
419
+ if (len < 10 /* strlen(".localhost") */)
420
+ return 0;
421
+
422
+ if (strcmp(name + (len - 10 /* strlen(".localhost") */), ".localhost") == 0)
423
+ return 1;
424
+
425
+ return 0;
426
+ }
427
+
431
428
  static int file_lookup(struct host_query *hquery)
432
429
  {
433
430
  FILE *fp;
434
431
  int error;
435
432
  int status;
436
- const char *path_hosts = NULL;
433
+ char *path_hosts = NULL;
437
434
 
438
435
  if (hquery->hints.ai_flags & ARES_AI_ENVHOSTS)
439
436
  {
440
- path_hosts = getenv("CARES_HOSTS");
437
+ path_hosts = ares_strdup(getenv("CARES_HOSTS"));
438
+ if (!path_hosts)
439
+ return ARES_ENOMEM;
440
+ }
441
+
442
+ if (hquery->channel->hosts_path)
443
+ {
444
+ path_hosts = ares_strdup(hquery->channel->hosts_path);
445
+ if (!path_hosts)
446
+ return ARES_ENOMEM;
441
447
  }
442
448
 
443
449
  if (!path_hosts)
@@ -471,15 +477,15 @@ static int file_lookup(struct host_query *hquery)
471
477
  return ARES_ENOTFOUND;
472
478
 
473
479
  strcat(PATH_HOSTS, WIN_PATH_HOSTS);
474
- path_hosts = PATH_HOSTS;
475
-
476
480
  #elif defined(WATT32)
477
481
  const char *PATH_HOSTS = _w32_GetHostsFile();
478
482
 
479
483
  if (!PATH_HOSTS)
480
484
  return ARES_ENOTFOUND;
481
485
  #endif
482
- path_hosts = PATH_HOSTS;
486
+ path_hosts = ares_strdup(PATH_HOSTS);
487
+ if (!path_hosts)
488
+ return ARES_ENOMEM;
483
489
  }
484
490
 
485
491
  fp = fopen(path_hosts, "r");
@@ -490,16 +496,34 @@ static int file_lookup(struct host_query *hquery)
490
496
  {
491
497
  case ENOENT:
492
498
  case ESRCH:
493
- return ARES_ENOTFOUND;
499
+ status = ARES_ENOTFOUND;
500
+ break;
494
501
  default:
495
502
  DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
496
503
  strerror(error)));
497
504
  DEBUGF(fprintf(stderr, "Error opening file: %s\n", path_hosts));
498
- return ARES_EFILE;
505
+ status = ARES_EFILE;
506
+ break;
499
507
  }
500
508
  }
501
- status = ares__readaddrinfo(fp, hquery->name, hquery->port, &hquery->hints, hquery->ai);
502
- fclose(fp);
509
+ else
510
+ {
511
+ status = ares__readaddrinfo(fp, hquery->name, hquery->port, &hquery->hints, hquery->ai);
512
+ fclose(fp);
513
+ }
514
+ ares_free(path_hosts);
515
+
516
+ /* RFC6761 section 6.3 #3 states that "Name resolution APIs and libraries
517
+ * SHOULD recognize localhost names as special and SHOULD always return the
518
+ * IP loopback address for address queries".
519
+ * We will also ignore ALL errors when trying to resolve localhost, such
520
+ * as permissions errors reading /etc/hosts or a malformed /etc/hosts */
521
+ if (status != ARES_SUCCESS && is_localhost(hquery->name))
522
+ {
523
+ return ares__addrinfo_localhost(hquery->name, hquery->port,
524
+ &hquery->hints, hquery->ai);
525
+ }
526
+
503
527
  return status;
504
528
  }
505
529
 
@@ -508,9 +532,16 @@ static void next_lookup(struct host_query *hquery, int status)
508
532
  switch (*hquery->remaining_lookups)
509
533
  {
510
534
  case 'b':
511
- /* DNS lookup */
512
- if (next_dns_lookup(hquery))
513
- break;
535
+ /* RFC6761 section 6.3 #3 says "Name resolution APIs SHOULD NOT send
536
+ * queries for localhost names to their configured caching DNS
537
+ * server(s)." */
538
+ if (!is_localhost(hquery->name))
539
+ {
540
+ /* DNS lookup */
541
+ if (next_dns_lookup(hquery))
542
+ break;
543
+ }
544
+
514
545
  hquery->remaining_lookups++;
515
546
  next_lookup(hquery, status);
516
547
  break;
@@ -542,24 +573,36 @@ static void host_callback(void *arg, int status, int timeouts,
542
573
 
543
574
  if (status == ARES_SUCCESS)
544
575
  {
545
- addinfostatus = ares__parse_into_addrinfo(abuf, alen, hquery->ai);
576
+ addinfostatus = ares__parse_into_addrinfo(abuf, alen, 1, hquery->port, hquery->ai);
546
577
  }
547
578
 
548
579
  if (!hquery->remaining)
549
580
  {
550
- if (addinfostatus != ARES_SUCCESS)
581
+ if (addinfostatus != ARES_SUCCESS && addinfostatus != ARES_ENODATA)
551
582
  {
552
583
  /* error in parsing result e.g. no memory */
553
- end_hquery(hquery, addinfostatus);
584
+ if (addinfostatus == ARES_EBADRESP && hquery->ai->nodes)
585
+ {
586
+ /* We got a bad response from server, but at least one query
587
+ * ended with ARES_SUCCESS */
588
+ end_hquery(hquery, ARES_SUCCESS);
589
+ }
590
+ else
591
+ {
592
+ end_hquery(hquery, addinfostatus);
593
+ }
554
594
  }
555
595
  else if (hquery->ai->nodes)
556
596
  {
557
597
  /* at least one query ended with ARES_SUCCESS */
558
598
  end_hquery(hquery, ARES_SUCCESS);
559
599
  }
560
- else if (status == ARES_ENOTFOUND)
600
+ else if (status == ARES_ENOTFOUND || status == ARES_ENODATA ||
601
+ addinfostatus == ARES_ENODATA)
561
602
  {
562
- next_lookup(hquery, status);
603
+ if (status == ARES_ENODATA || addinfostatus == ARES_ENODATA)
604
+ hquery->nodata_cnt++;
605
+ next_lookup(hquery, hquery->nodata_cnt?ARES_ENODATA:status);
563
606
  }
564
607
  else if (status == ARES_EDESTRUCTION)
565
608
  {
@@ -586,6 +629,8 @@ void ares_getaddrinfo(ares_channel channel,
586
629
  unsigned short port = 0;
587
630
  int family;
588
631
  struct ares_addrinfo *ai;
632
+ char *alias_name = NULL;
633
+ int status;
589
634
 
590
635
  if (!hints)
591
636
  {
@@ -610,28 +655,47 @@ void ares_getaddrinfo(ares_channel channel,
610
655
  return;
611
656
  }
612
657
 
658
+ /* perform HOSTALIAS resolution (technically this function does some other
659
+ * things we are going to ignore) */
660
+ status = ares__single_domain(channel, name, &alias_name);
661
+ if (status != ARES_SUCCESS) {
662
+ callback(arg, status, 0, NULL);
663
+ return;
664
+ }
665
+
666
+ if (alias_name)
667
+ name = alias_name;
668
+
613
669
  if (service)
614
670
  {
615
671
  if (hints->ai_flags & ARES_AI_NUMERICSERV)
616
672
  {
617
- port = (unsigned short)strtoul(service, NULL, 0);
618
- if (!port)
673
+ unsigned long val;
674
+ errno = 0;
675
+ val = strtoul(service, NULL, 0);
676
+ if ((val == 0 && errno != 0) || val > 65535)
619
677
  {
678
+ ares_free(alias_name);
620
679
  callback(arg, ARES_ESERVICE, 0, NULL);
621
680
  return;
622
681
  }
682
+ port = (unsigned short)val;
623
683
  }
624
684
  else
625
685
  {
626
686
  port = lookup_service(service, 0);
627
687
  if (!port)
628
688
  {
629
- port = (unsigned short)strtoul(service, NULL, 0);
630
- if (!port)
689
+ unsigned long val;
690
+ errno = 0;
691
+ val = strtoul(service, NULL, 0);
692
+ if ((val == 0 && errno != 0) || val > 65535)
631
693
  {
694
+ ares_free(alias_name);
632
695
  callback(arg, ARES_ESERVICE, 0, NULL);
633
696
  return;
634
697
  }
698
+ port = (unsigned short)val;
635
699
  }
636
700
  }
637
701
  }
@@ -639,12 +703,14 @@ void ares_getaddrinfo(ares_channel channel,
639
703
  ai = ares__malloc_addrinfo();
640
704
  if (!ai)
641
705
  {
706
+ ares_free(alias_name);
642
707
  callback(arg, ARES_ENOMEM, 0, NULL);
643
708
  return;
644
709
  }
645
710
 
646
711
  if (fake_addrinfo(name, port, hints, ai, callback, arg))
647
712
  {
713
+ ares_free(alias_name);
648
714
  return;
649
715
  }
650
716
 
@@ -652,12 +718,14 @@ void ares_getaddrinfo(ares_channel channel,
652
718
  hquery = ares_malloc(sizeof(struct host_query));
653
719
  if (!hquery)
654
720
  {
721
+ ares_free(alias_name);
655
722
  ares_freeaddrinfo(ai);
656
723
  callback(arg, ARES_ENOMEM, 0, NULL);
657
724
  return;
658
725
  }
659
726
 
660
727
  hquery->name = ares_strdup(name);
728
+ ares_free(alias_name);
661
729
  if (!hquery->name)
662
730
  {
663
731
  ares_free(hquery);
@@ -677,6 +745,7 @@ void ares_getaddrinfo(ares_channel channel,
677
745
  hquery->ai = ai;
678
746
  hquery->next_domain = -1;
679
747
  hquery->remaining = 0;
748
+ hquery->nodata_cnt = 0;
680
749
 
681
750
  /* Start performing lookups according to channel->lookups. */
682
751
  next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */);
@@ -707,7 +776,7 @@ static int next_dns_lookup(struct host_query *hquery)
707
776
  hquery->next_domain++;
708
777
  }
709
778
 
710
- if (!s && hquery->next_domain < hquery->channel->ndomains)
779
+ if (!s && hquery->next_domain < hquery->channel->ndomains && !as_is_only(hquery))
711
780
  {
712
781
  status = ares__cat_domain(
713
782
  hquery->name,
@@ -755,7 +824,7 @@ static int as_is_first(const struct host_query* hquery)
755
824
  {
756
825
  char* p;
757
826
  int ndots = 0;
758
- size_t nname = strlen(hquery->name);
827
+ size_t nname = hquery->name?strlen(hquery->name):0;
759
828
  for (p = hquery->name; *p; p++)
760
829
  {
761
830
  if (*p == '.')
@@ -770,3 +839,12 @@ static int as_is_first(const struct host_query* hquery)
770
839
  }
771
840
  return ndots >= hquery->channel->ndots;
772
841
  }
842
+
843
+ static int as_is_only(const struct host_query* hquery)
844
+ {
845
+ size_t nname = hquery->name?strlen(hquery->name):0;
846
+ if (nname && hquery->name[nname-1] == '.')
847
+ return 1;
848
+ return 0;
849
+ }
850
+