rubygems-update 3.5.3 → 3.7.1

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 (437) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1410 -686
  3. data/CODE_OF_CONDUCT.md +79 -28
  4. data/CONTRIBUTING.md +4 -226
  5. data/Manifest.txt +107 -83
  6. data/README.md +16 -11
  7. data/SECURITY.md +7 -0
  8. data/bundler/CHANGELOG.md +1525 -931
  9. data/bundler/README.md +9 -9
  10. data/bundler/bundler.gemspec +2 -2
  11. data/bundler/lib/bundler/build_metadata.rb +10 -11
  12. data/bundler/lib/bundler/checksum.rb +22 -12
  13. data/bundler/lib/bundler/cli/add.rb +3 -1
  14. data/bundler/lib/bundler/cli/binstubs.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +3 -3
  16. data/bundler/lib/bundler/cli/common.rb +1 -1
  17. data/bundler/lib/bundler/cli/config.rb +2 -2
  18. data/bundler/lib/bundler/cli/console.rb +8 -10
  19. data/bundler/lib/bundler/cli/doctor/diagnose.rb +167 -0
  20. data/bundler/lib/bundler/cli/doctor/ssl.rb +249 -0
  21. data/bundler/lib/bundler/cli/doctor.rb +27 -151
  22. data/bundler/lib/bundler/cli/exec.rb +1 -0
  23. data/bundler/lib/bundler/cli/fund.rb +1 -1
  24. data/bundler/lib/bundler/cli/gem.rb +74 -46
  25. data/bundler/lib/bundler/cli/info.rb +6 -6
  26. data/bundler/lib/bundler/cli/inject.rb +3 -3
  27. data/bundler/lib/bundler/cli/install.rb +19 -10
  28. data/bundler/lib/bundler/cli/issue.rb +3 -3
  29. data/bundler/lib/bundler/cli/lock.rb +32 -11
  30. data/bundler/lib/bundler/cli/outdated.rb +23 -23
  31. data/bundler/lib/bundler/cli/plugin.rb +3 -2
  32. data/bundler/lib/bundler/cli/pristine.rb +1 -1
  33. data/bundler/lib/bundler/cli/show.rb +3 -3
  34. data/bundler/lib/bundler/cli/update.rb +3 -3
  35. data/bundler/lib/bundler/cli.rb +75 -145
  36. data/bundler/lib/bundler/compact_index_client/cache.rb +48 -73
  37. data/bundler/lib/bundler/compact_index_client/cache_file.rb +0 -5
  38. data/bundler/lib/bundler/compact_index_client/parser.rb +84 -0
  39. data/bundler/lib/bundler/compact_index_client/updater.rb +6 -16
  40. data/bundler/lib/bundler/compact_index_client.rb +52 -85
  41. data/bundler/lib/bundler/constants.rb +8 -1
  42. data/bundler/lib/bundler/current_ruby.rb +48 -34
  43. data/bundler/lib/bundler/definition.rb +501 -328
  44. data/bundler/lib/bundler/dependency.rb +93 -47
  45. data/bundler/lib/bundler/dsl.rb +147 -103
  46. data/bundler/lib/bundler/endpoint_specification.rb +30 -3
  47. data/bundler/lib/bundler/env.rb +1 -1
  48. data/bundler/lib/bundler/environment_preserver.rb +5 -23
  49. data/bundler/lib/bundler/errors.rb +53 -5
  50. data/bundler/lib/bundler/feature_flag.rb +18 -18
  51. data/bundler/lib/bundler/fetcher/compact_index.rb +16 -25
  52. data/bundler/lib/bundler/fetcher/dependency.rb +2 -1
  53. data/bundler/lib/bundler/fetcher/downloader.rb +34 -8
  54. data/bundler/lib/bundler/fetcher.rb +63 -26
  55. data/bundler/lib/bundler/force_platform.rb +0 -2
  56. data/bundler/lib/bundler/friendly_errors.rb +3 -2
  57. data/bundler/lib/bundler/gem_helper.rb +1 -1
  58. data/bundler/lib/bundler/gem_version_promoter.rb +42 -40
  59. data/bundler/lib/bundler/index.rb +7 -2
  60. data/bundler/lib/bundler/injector.rb +14 -16
  61. data/bundler/lib/bundler/inline.rb +42 -17
  62. data/bundler/lib/bundler/installer/gem_installer.rb +4 -3
  63. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  64. data/bundler/lib/bundler/installer/standalone.rb +2 -5
  65. data/bundler/lib/bundler/installer.rb +22 -45
  66. data/bundler/lib/bundler/lazy_specification.rb +121 -48
  67. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  68. data/bundler/lib/bundler/lockfile_parser.rb +36 -9
  69. data/bundler/lib/bundler/man/bundle-add.1 +44 -27
  70. data/bundler/lib/bundler/man/bundle-add.1.ronn +52 -23
  71. data/bundler/lib/bundler/man/bundle-binstubs.1 +9 -6
  72. data/bundler/lib/bundler/man/bundle-binstubs.1.ronn +6 -3
  73. data/bundler/lib/bundler/man/bundle-cache.1 +32 -4
  74. data/bundler/lib/bundler/man/bundle-cache.1.ronn +31 -2
  75. data/bundler/lib/bundler/man/bundle-check.1 +7 -5
  76. data/bundler/lib/bundler/man/bundle-check.1.ronn +7 -2
  77. data/bundler/lib/bundler/man/bundle-clean.1 +3 -3
  78. data/bundler/lib/bundler/man/bundle-config.1 +180 -138
  79. data/bundler/lib/bundler/man/bundle-config.1.ronn +96 -99
  80. data/bundler/lib/bundler/man/bundle-console.1 +4 -6
  81. data/bundler/lib/bundler/man/bundle-console.1.ronn +2 -7
  82. data/bundler/lib/bundler/man/bundle-doctor.1 +46 -7
  83. data/bundler/lib/bundler/man/bundle-doctor.1.ronn +49 -5
  84. data/bundler/lib/bundler/man/bundle-env.1 +9 -0
  85. data/bundler/lib/bundler/man/bundle-env.1.ronn +10 -0
  86. data/bundler/lib/bundler/man/bundle-exec.1 +9 -6
  87. data/bundler/lib/bundler/man/bundle-exec.1.ronn +6 -3
  88. data/bundler/lib/bundler/man/bundle-fund.1 +22 -0
  89. data/bundler/lib/bundler/man/bundle-fund.1.ronn +25 -0
  90. data/bundler/lib/bundler/man/bundle-gem.1 +69 -28
  91. data/bundler/lib/bundler/man/bundle-gem.1.ronn +42 -6
  92. data/bundler/lib/bundler/man/bundle-help.1 +3 -3
  93. data/bundler/lib/bundler/man/bundle-info.1 +7 -4
  94. data/bundler/lib/bundler/man/bundle-info.1.ronn +6 -2
  95. data/bundler/lib/bundler/man/bundle-init.1 +5 -5
  96. data/bundler/lib/bundler/man/bundle-init.1.ronn +3 -2
  97. data/bundler/lib/bundler/man/bundle-inject.1 +13 -5
  98. data/bundler/lib/bundler/man/bundle-inject.1.ronn +10 -2
  99. data/bundler/lib/bundler/man/bundle-install.1 +20 -17
  100. data/bundler/lib/bundler/man/bundle-install.1.ronn +26 -23
  101. data/bundler/lib/bundler/man/bundle-issue.1 +45 -0
  102. data/bundler/lib/bundler/man/bundle-issue.1.ronn +37 -0
  103. data/bundler/lib/bundler/man/bundle-licenses.1 +9 -0
  104. data/bundler/lib/bundler/man/bundle-licenses.1.ronn +10 -0
  105. data/bundler/lib/bundler/man/bundle-list.1 +3 -3
  106. data/bundler/lib/bundler/man/bundle-list.1.ronn +4 -1
  107. data/bundler/lib/bundler/man/bundle-lock.1 +23 -8
  108. data/bundler/lib/bundler/man/bundle-lock.1.ronn +25 -4
  109. data/bundler/lib/bundler/man/bundle-open.1 +4 -4
  110. data/bundler/lib/bundler/man/bundle-open.1.ronn +2 -1
  111. data/bundler/lib/bundler/man/bundle-outdated.1 +10 -7
  112. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +8 -4
  113. data/bundler/lib/bundler/man/bundle-platform.1 +3 -3
  114. data/bundler/lib/bundler/man/bundle-plugin.1 +9 -6
  115. data/bundler/lib/bundler/man/bundle-plugin.1.ronn +7 -3
  116. data/bundler/lib/bundler/man/bundle-pristine.1 +3 -3
  117. data/bundler/lib/bundler/man/bundle-pristine.1.ronn +1 -1
  118. data/bundler/lib/bundler/man/bundle-remove.1 +3 -3
  119. data/bundler/lib/bundler/man/bundle-remove.1.ronn +1 -1
  120. data/bundler/lib/bundler/man/bundle-show.1 +7 -4
  121. data/bundler/lib/bundler/man/bundle-show.1.ronn +4 -0
  122. data/bundler/lib/bundler/man/bundle-update.1 +17 -11
  123. data/bundler/lib/bundler/man/bundle-update.1.ronn +17 -9
  124. data/bundler/lib/bundler/man/bundle-version.1 +3 -3
  125. data/bundler/lib/bundler/man/bundle-viz.1 +6 -6
  126. data/bundler/lib/bundler/man/bundle-viz.1.ronn +7 -3
  127. data/bundler/lib/bundler/man/bundle.1 +3 -3
  128. data/bundler/lib/bundler/man/gemfile.5 +7 -5
  129. data/bundler/lib/bundler/man/gemfile.5.ronn +8 -2
  130. data/bundler/lib/bundler/man/index.txt +4 -0
  131. data/bundler/lib/bundler/match_metadata.rb +13 -0
  132. data/bundler/lib/bundler/match_platform.rb +31 -12
  133. data/bundler/lib/bundler/materialization.rb +59 -0
  134. data/bundler/lib/bundler/mirror.rb +3 -3
  135. data/bundler/lib/bundler/plugin/api/source.rb +5 -4
  136. data/bundler/lib/bundler/plugin/events.rb +24 -0
  137. data/bundler/lib/bundler/plugin/index.rb +5 -1
  138. data/bundler/lib/bundler/plugin/installer/path.rb +26 -0
  139. data/bundler/lib/bundler/plugin/installer.rb +37 -17
  140. data/bundler/lib/bundler/plugin/source_list.rb +4 -4
  141. data/bundler/lib/bundler/plugin.rb +21 -2
  142. data/bundler/lib/bundler/process_lock.rb +10 -14
  143. data/bundler/lib/bundler/remote_specification.rb +6 -1
  144. data/bundler/lib/bundler/resolver/base.rb +14 -3
  145. data/bundler/lib/bundler/resolver/candidate.rb +18 -27
  146. data/bundler/lib/bundler/resolver/package.rb +20 -3
  147. data/bundler/lib/bundler/resolver/spec_group.rb +22 -27
  148. data/bundler/lib/bundler/resolver/strategy.rb +40 -0
  149. data/bundler/lib/bundler/resolver.rb +114 -52
  150. data/bundler/lib/bundler/retry.rb +1 -1
  151. data/bundler/lib/bundler/ruby_dsl.rb +12 -3
  152. data/bundler/lib/bundler/ruby_version.rb +7 -1
  153. data/bundler/lib/bundler/rubygems_ext.rb +303 -150
  154. data/bundler/lib/bundler/rubygems_gem_installer.rb +40 -5
  155. data/bundler/lib/bundler/rubygems_integration.rb +40 -73
  156. data/bundler/lib/bundler/runtime.rb +48 -35
  157. data/bundler/lib/bundler/self_manager.rb +36 -26
  158. data/bundler/lib/bundler/settings/validator.rb +0 -23
  159. data/bundler/lib/bundler/settings.rb +36 -27
  160. data/bundler/lib/bundler/setup.rb +6 -0
  161. data/bundler/lib/bundler/shared_helpers.rb +45 -25
  162. data/bundler/lib/bundler/source/gemspec.rb +1 -4
  163. data/bundler/lib/bundler/source/git/git_proxy.rb +26 -9
  164. data/bundler/lib/bundler/source/git.rb +113 -41
  165. data/bundler/lib/bundler/source/metadata.rb +4 -3
  166. data/bundler/lib/bundler/source/path.rb +14 -18
  167. data/bundler/lib/bundler/source/rubygems/remote.rb +12 -4
  168. data/bundler/lib/bundler/source/rubygems.rb +54 -48
  169. data/bundler/lib/bundler/source.rb +2 -0
  170. data/bundler/lib/bundler/source_list.rb +54 -12
  171. data/bundler/lib/bundler/source_map.rb +1 -1
  172. data/bundler/lib/bundler/spec_set.rb +227 -103
  173. data/bundler/lib/bundler/stub_specification.rb +29 -2
  174. data/bundler/lib/bundler/templates/Executable +0 -11
  175. data/bundler/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +77 -29
  176. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -3
  177. data/bundler/lib/bundler/templates/newgem/README.md.tt +7 -3
  178. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +17 -15
  179. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +14 -12
  180. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +0 -5
  181. data/bundler/lib/bundler/ui/shell.rb +26 -4
  182. data/bundler/lib/bundler/ui/silent.rb +12 -1
  183. data/bundler/lib/bundler/uri_credentials_filter.rb +3 -3
  184. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +53 -3
  185. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  186. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +11 -0
  187. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +15 -13
  188. data/bundler/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  189. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +2 -1
  190. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +134 -57
  191. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +4 -24
  192. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +1 -0
  193. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
  194. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +20 -8
  195. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +17 -29
  196. data/bundler/lib/bundler/vendor/securerandom/COPYING +56 -0
  197. data/bundler/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
  198. data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +3 -5
  199. data/bundler/lib/bundler/vendor/thor/lib/thor/group.rb +11 -0
  200. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +1 -4
  201. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/option.rb +2 -2
  202. data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +2 -1
  203. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +9 -9
  204. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/html.rb +1 -1
  205. data/bundler/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +5 -21
  206. data/bundler/lib/bundler/vendor/thor/lib/thor/util.rb +1 -1
  207. data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
  208. data/bundler/lib/bundler/vendor/thor/lib/thor.rb +11 -0
  209. data/bundler/lib/bundler/vendor/uri/COPYING +56 -0
  210. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +43 -16
  211. data/bundler/lib/bundler/vendor/uri/lib/uri/file.rb +3 -3
  212. data/bundler/lib/bundler/vendor/uri/lib/uri/ftp.rb +1 -1
  213. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +28 -37
  214. data/bundler/lib/bundler/vendor/uri/lib/uri/http.rb +2 -2
  215. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +16 -9
  216. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +26 -3
  217. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  218. data/bundler/lib/bundler/vendor/uri/lib/uri.rb +9 -9
  219. data/bundler/lib/bundler/vendored_net_http.rb +20 -5
  220. data/bundler/lib/bundler/vendored_securerandom.rb +12 -0
  221. data/bundler/lib/bundler/vendored_timeout.rb +7 -3
  222. data/bundler/lib/bundler/vendored_uri.rb +18 -1
  223. data/bundler/lib/bundler/version.rb +10 -2
  224. data/bundler/lib/bundler/worker.rb +1 -1
  225. data/bundler/lib/bundler/yaml_serializer.rb +12 -7
  226. data/bundler/lib/bundler.rb +101 -61
  227. data/{bundler → doc/bundler}/UPGRADING.md +132 -127
  228. data/doc/rubygems/CONTRIBUTING.md +227 -0
  229. data/{POLICIES.md → doc/rubygems/POLICIES.md} +86 -17
  230. data/exe/update_rubygems +1 -1
  231. data/lib/rubygems/basic_specification.rb +50 -10
  232. data/lib/rubygems/bundler_version_finder.rb +1 -1
  233. data/lib/rubygems/command.rb +1 -4
  234. data/lib/rubygems/command_manager.rb +5 -6
  235. data/lib/rubygems/commands/build_command.rb +2 -11
  236. data/lib/rubygems/commands/cleanup_command.rb +3 -13
  237. data/lib/rubygems/commands/contents_command.rb +17 -10
  238. data/lib/rubygems/commands/environment_command.rb +5 -0
  239. data/lib/rubygems/commands/exec_command.rb +18 -11
  240. data/lib/rubygems/commands/fetch_command.rb +14 -0
  241. data/lib/rubygems/commands/help_command.rb +2 -2
  242. data/lib/rubygems/commands/install_command.rb +0 -4
  243. data/lib/rubygems/commands/pristine_command.rb +29 -19
  244. data/lib/rubygems/commands/push_command.rb +31 -6
  245. data/lib/rubygems/commands/rdoc_command.rb +3 -10
  246. data/lib/rubygems/commands/rebuild_command.rb +262 -0
  247. data/lib/rubygems/commands/setup_command.rb +13 -18
  248. data/lib/rubygems/commands/sources_command.rb +2 -2
  249. data/lib/rubygems/commands/uninstall_command.rb +9 -4
  250. data/lib/rubygems/commands/unpack_command.rb +0 -6
  251. data/lib/rubygems/commands/update_command.rb +13 -22
  252. data/lib/rubygems/config_file.rb +45 -16
  253. data/lib/rubygems/core_ext/kernel_require.rb +15 -3
  254. data/lib/rubygems/core_ext/kernel_warn.rb +2 -6
  255. data/lib/rubygems/defaults.rb +7 -7
  256. data/lib/rubygems/dependency.rb +12 -16
  257. data/lib/rubygems/dependency_list.rb +1 -1
  258. data/lib/rubygems/deprecate.rb +79 -77
  259. data/lib/rubygems/errors.rb +2 -1
  260. data/lib/rubygems/exceptions.rb +2 -9
  261. data/lib/rubygems/ext/builder.rb +21 -8
  262. data/lib/rubygems/ext/cargo_builder.rb +16 -26
  263. data/lib/rubygems/ext/cmake_builder.rb +7 -2
  264. data/lib/rubygems/ext/configure_builder.rb +7 -2
  265. data/lib/rubygems/ext/ext_conf_builder.rb +9 -5
  266. data/lib/rubygems/ext/rake_builder.rb +7 -4
  267. data/lib/rubygems/gem_runner.rb +9 -0
  268. data/lib/rubygems/gemcutter_utilities/webauthn_listener.rb +11 -4
  269. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -1
  270. data/lib/rubygems/gemcutter_utilities.rb +52 -26
  271. data/lib/rubygems/gemspec_helpers.rb +19 -0
  272. data/lib/rubygems/install_update_options.rb +5 -0
  273. data/lib/rubygems/installer.rb +76 -90
  274. data/lib/rubygems/local_remote_options.rb +8 -8
  275. data/lib/rubygems/package/tar_header.rb +31 -4
  276. data/lib/rubygems/package/tar_reader/entry.rb +1 -5
  277. data/lib/rubygems/package/tar_writer.rb +5 -4
  278. data/lib/rubygems/package.rb +13 -8
  279. data/lib/rubygems/platform.rb +148 -43
  280. data/lib/rubygems/psych_tree.rb +4 -0
  281. data/lib/rubygems/query_utils.rb +2 -2
  282. data/lib/rubygems/rdoc.rb +16 -3
  283. data/lib/rubygems/remote_fetcher.rb +6 -7
  284. data/lib/rubygems/request.rb +5 -5
  285. data/lib/rubygems/request_set/gem_dependency_api.rb +1 -1
  286. data/lib/rubygems/request_set.rb +4 -7
  287. data/lib/rubygems/requirement.rb +16 -12
  288. data/lib/rubygems/resolver/activation_request.rb +1 -1
  289. data/lib/rubygems/resolver/api_set/gem_parser.rb +2 -5
  290. data/lib/rubygems/resolver/api_set.rb +13 -8
  291. data/lib/rubygems/resolver/best_set.rb +1 -29
  292. data/lib/rubygems/resolver/composed_set.rb +3 -3
  293. data/lib/rubygems/resolver/git_set.rb +0 -1
  294. data/lib/rubygems/resolver/index_set.rb +2 -2
  295. data/lib/rubygems/resolver/source_set.rb +1 -1
  296. data/lib/rubygems/resolver/spec_specification.rb +7 -0
  297. data/lib/rubygems/resolver.rb +8 -8
  298. data/lib/rubygems/s3_uri_signer.rb +8 -6
  299. data/lib/rubygems/safe_marshal/reader.rb +31 -14
  300. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +29 -16
  301. data/lib/rubygems/safe_yaml.rb +10 -1
  302. data/lib/rubygems/security.rb +1 -1
  303. data/lib/rubygems/source/git.rb +22 -17
  304. data/lib/rubygems/source/installed.rb +3 -1
  305. data/lib/rubygems/source/local.rb +8 -4
  306. data/lib/rubygems/source/specific_file.rb +5 -3
  307. data/lib/rubygems/source.rb +37 -29
  308. data/lib/rubygems/source_list.rb +1 -1
  309. data/lib/rubygems/spec_fetcher.rb +47 -15
  310. data/lib/rubygems/specification.rb +110 -183
  311. data/lib/rubygems/specification_policy.rb +33 -13
  312. data/lib/rubygems/specification_record.rb +212 -0
  313. data/lib/rubygems/stub_specification.rb +32 -10
  314. data/lib/rubygems/target_rbconfig.rb +50 -0
  315. data/lib/rubygems/uninstaller.rb +42 -22
  316. data/lib/rubygems/uri.rb +6 -6
  317. data/lib/rubygems/uri_formatter.rb +2 -1
  318. data/lib/rubygems/util/licenses.rb +118 -1
  319. data/lib/rubygems/util.rb +1 -1
  320. data/lib/rubygems/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +57 -0
  321. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/delegates/specification_provider.rb +11 -11
  322. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/action.rb +1 -1
  323. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +1 -1
  324. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +1 -1
  325. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +1 -1
  326. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +1 -1
  327. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/log.rb +1 -1
  328. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/set_payload.rb +1 -1
  329. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/tag.rb +1 -1
  330. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
  331. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/dependency_graph.rb +2 -2
  332. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/errors.rb +1 -1
  333. data/lib/rubygems/vendor/molinillo/lib/molinillo/gem_metadata.rb +6 -0
  334. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/specification_provider.rb +2 -2
  335. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/modules/ui.rb +1 -1
  336. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolution.rb +4 -4
  337. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/resolver.rb +1 -1
  338. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo/state.rb +1 -1
  339. data/lib/rubygems/{resolver → vendor}/molinillo/lib/molinillo.rb +2 -2
  340. data/lib/rubygems/vendor/net-http/COPYING +56 -0
  341. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/generic_request.rb +9 -9
  342. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/header.rb +3 -3
  343. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/request.rb +3 -3
  344. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/requests.rb +35 -30
  345. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/response.rb +2 -2
  346. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/responses.rb +6 -6
  347. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/status.rb +1 -1
  348. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http.rb +149 -70
  349. data/lib/rubygems/{net-http → vendor/net-http}/lib/net/https.rb +1 -1
  350. data/lib/rubygems/vendor/optparse/COPYING +56 -0
  351. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/ac.rb +16 -0
  352. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/kwargs.rb +8 -3
  353. data/lib/rubygems/vendor/optparse/lib/optparse/uri.rb +7 -0
  354. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/version.rb +9 -0
  355. data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse.rb +158 -62
  356. data/lib/rubygems/vendor/resolv/COPYING +56 -0
  357. data/lib/rubygems/{resolv → vendor/resolv}/lib/resolv.rb +165 -69
  358. data/lib/rubygems/vendor/securerandom/COPYING +56 -0
  359. data/lib/rubygems/vendor/securerandom/lib/securerandom.rb +102 -0
  360. data/lib/rubygems/vendor/timeout/COPYING +56 -0
  361. data/lib/rubygems/{timeout → vendor/timeout}/lib/timeout.rb +10 -11
  362. data/lib/rubygems/{tsort → vendor/tsort}/lib/tsort.rb +2 -2
  363. data/lib/rubygems/vendor/uri/COPYING +56 -0
  364. data/lib/rubygems/vendor/uri/lib/uri/common.rb +880 -0
  365. data/lib/rubygems/vendor/uri/lib/uri/file.rb +100 -0
  366. data/lib/rubygems/vendor/uri/lib/uri/ftp.rb +267 -0
  367. data/lib/rubygems/vendor/uri/lib/uri/generic.rb +1579 -0
  368. data/lib/rubygems/vendor/uri/lib/uri/http.rb +125 -0
  369. data/lib/rubygems/vendor/uri/lib/uri/https.rb +23 -0
  370. data/lib/rubygems/vendor/uri/lib/uri/ldap.rb +261 -0
  371. data/lib/rubygems/vendor/uri/lib/uri/ldaps.rb +22 -0
  372. data/lib/rubygems/vendor/uri/lib/uri/mailto.rb +293 -0
  373. data/lib/rubygems/vendor/uri/lib/uri/rfc2396_parser.rb +546 -0
  374. data/lib/rubygems/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
  375. data/lib/rubygems/vendor/uri/lib/uri/version.rb +6 -0
  376. data/lib/rubygems/vendor/uri/lib/uri/ws.rb +83 -0
  377. data/lib/rubygems/vendor/uri/lib/uri/wss.rb +23 -0
  378. data/lib/rubygems/vendor/uri/lib/uri.rb +104 -0
  379. data/lib/rubygems/vendored_molinillo.rb +3 -0
  380. data/lib/rubygems/vendored_net_http.rb +5 -0
  381. data/lib/rubygems/vendored_optparse.rb +3 -0
  382. data/lib/rubygems/vendored_securerandom.rb +3 -0
  383. data/lib/rubygems/vendored_timeout.rb +5 -0
  384. data/lib/rubygems/vendored_tsort.rb +3 -0
  385. data/lib/rubygems/version.rb +26 -9
  386. data/lib/rubygems/yaml_serializer.rb +12 -7
  387. data/lib/rubygems.rb +160 -53
  388. data/rubygems-update.gemspec +11 -6
  389. data/setup.rb +1 -1
  390. metadata +124 -96
  391. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +0 -32
  392. data/bundler/lib/bundler/gem_helpers.rb +0 -127
  393. data/bundler/lib/bundler/templates/Executable.bundler +0 -109
  394. data/bundler/lib/bundler/vendor/fileutils/.document +0 -1
  395. data/bundler/lib/bundler/vendor/net-http-persistent/.document +0 -1
  396. data/bundler/lib/bundler/vendor/pub_grub/.document +0 -1
  397. data/bundler/lib/bundler/vendor/thor/.document +0 -1
  398. data/bundler/lib/bundler/vendor/tsort/.document +0 -1
  399. data/bundler/lib/bundler/vendor/uri/.document +0 -1
  400. data/lib/rubygems/net/http.rb +0 -3
  401. data/lib/rubygems/net-http/.document +0 -1
  402. data/lib/rubygems/net-http/LICENSE.txt +0 -22
  403. data/lib/rubygems/net-http/lib/net/http/backward.rb +0 -40
  404. data/lib/rubygems/net-protocol/.document +0 -1
  405. data/lib/rubygems/net-protocol/LICENSE.txt +0 -22
  406. data/lib/rubygems/optparse/.document +0 -1
  407. data/lib/rubygems/optparse/lib/optparse/uri.rb +0 -7
  408. data/lib/rubygems/optparse.rb +0 -3
  409. data/lib/rubygems/resolv/.document +0 -1
  410. data/lib/rubygems/resolv/LICENSE.txt +0 -22
  411. data/lib/rubygems/resolver/molinillo/.document +0 -1
  412. data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  413. data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  414. data/lib/rubygems/resolver/molinillo.rb +0 -3
  415. data/lib/rubygems/shellwords.rb +0 -3
  416. data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA.pem +0 -21
  417. data/lib/rubygems/timeout/.document +0 -1
  418. data/lib/rubygems/timeout/LICENSE.txt +0 -22
  419. data/lib/rubygems/timeout.rb +0 -3
  420. data/lib/rubygems/tsort/.document +0 -1
  421. data/lib/rubygems/tsort/LICENSE.txt +0 -22
  422. data/lib/rubygems/tsort.rb +0 -3
  423. /data/{lib/rubygems/optparse → bundler/lib/bundler/vendor/fileutils}/COPYING +0 -0
  424. /data/{MAINTAINERS.txt → doc/MAINTAINERS.txt} +0 -0
  425. /data/{UPGRADING.md → doc/rubygems/UPGRADING.md} +0 -0
  426. /data/lib/rubygems/ssl_certs/rubygems.org/{GlobalSignRootCA_R3.pem → GlobalSign.pem} +0 -0
  427. /data/{bundler/lib/bundler/vendor/connection_pool → lib/rubygems/vendor}/.document +0 -0
  428. /data/lib/rubygems/{resolver → vendor}/molinillo/LICENSE +0 -0
  429. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/exceptions.rb +0 -0
  430. /data/lib/rubygems/{net-http → vendor/net-http}/lib/net/http/proxy_delta.rb +0 -0
  431. /data/{bundler/lib/bundler/vendor/fileutils → lib/rubygems/vendor/net-protocol}/LICENSE.txt +0 -0
  432. /data/lib/rubygems/{net-protocol → vendor/net-protocol}/lib/net/protocol.rb +0 -0
  433. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optionparser.rb +0 -0
  434. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/date.rb +0 -0
  435. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/shellwords.rb +0 -0
  436. /data/lib/rubygems/{optparse → vendor/optparse}/lib/optparse/time.rb +0 -0
  437. /data/{bundler/lib/bundler/vendor/uri → lib/rubygems/vendor/tsort}/LICENSE.txt +0 -0
@@ -3,11 +3,7 @@
3
3
  require 'socket'
4
4
  require_relative '../../timeout/lib/timeout'
5
5
  require 'io/wait'
6
-
7
- begin
8
- require 'securerandom'
9
- rescue LoadError
10
- end
6
+ require_relative '../../../vendored_securerandom'
11
7
 
12
8
  # Gem::Resolv is a thread-aware DNS resolver library written in Ruby. Gem::Resolv can
13
9
  # handle multiple DNS requests concurrently without blocking the entire Ruby
@@ -37,7 +33,7 @@ end
37
33
 
38
34
  class Gem::Resolv
39
35
 
40
- VERSION = "0.3.0"
36
+ VERSION = "0.6.2"
41
37
 
42
38
  ##
43
39
  # Looks up the first IP address for +name+.
@@ -83,9 +79,22 @@ class Gem::Resolv
83
79
 
84
80
  ##
85
81
  # Creates a new Gem::Resolv using +resolvers+.
82
+ #
83
+ # If +resolvers+ is not given, a hash, or +nil+, uses a Hosts resolver and
84
+ # and a DNS resolver. If +resolvers+ is a hash, uses the hash as
85
+ # configuration for the DNS resolver.
86
+
87
+ def initialize(resolvers=(arg_not_set = true; nil), use_ipv6: (keyword_not_set = true; nil))
88
+ if !keyword_not_set && !arg_not_set
89
+ warn "Support for separate use_ipv6 keyword is deprecated, as it is ignored if an argument is provided. Do not provide a positional argument if using the use_ipv6 keyword argument.", uplevel: 1
90
+ end
86
91
 
87
- def initialize(resolvers=nil, use_ipv6: nil)
88
- @resolvers = resolvers || [Hosts.new, DNS.new(DNS::Config.default_config_hash.merge(use_ipv6: use_ipv6))]
92
+ @resolvers = case resolvers
93
+ when Hash, nil
94
+ [Hosts.new, DNS.new(DNS::Config.default_config_hash.merge(resolvers || {}))]
95
+ else
96
+ resolvers
97
+ end
89
98
  end
90
99
 
91
100
  ##
@@ -164,13 +173,16 @@ class Gem::Resolv
164
173
 
165
174
  class ResolvTimeout < Gem::Timeout::Error; end
166
175
 
176
+ WINDOWS = /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM || ::RbConfig::CONFIG['host_os'] =~ /mswin/
177
+ private_constant :WINDOWS
178
+
167
179
  ##
168
180
  # Gem::Resolv::Hosts is a hostname resolver that uses the system hosts file.
169
181
 
170
182
  class Hosts
171
- if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM and
183
+ if WINDOWS
172
184
  begin
173
- require 'win32/resolv'
185
+ require 'win32/resolv' unless defined?(Win32::Resolv)
174
186
  DefaultFileName = Win32::Resolv.get_hosts_path || IO::NULL
175
187
  rescue LoadError
176
188
  end
@@ -194,17 +206,10 @@ class Gem::Resolv
194
206
  File.open(@filename, 'rb') {|f|
195
207
  f.each {|line|
196
208
  line.sub!(/#.*/, '')
197
- addr, hostname, *aliases = line.split(/\s+/)
209
+ addr, *hostnames = line.split(/\s+/)
198
210
  next unless addr
199
- @addr2name[addr] = [] unless @addr2name.include? addr
200
- @addr2name[addr] << hostname
201
- @addr2name[addr].concat(aliases)
202
- @name2addr[hostname] = [] unless @name2addr.include? hostname
203
- @name2addr[hostname] << addr
204
- aliases.each {|n|
205
- @name2addr[n] = [] unless @name2addr.include? n
206
- @name2addr[n] << addr
207
- }
211
+ (@addr2name[addr] ||= []).concat(hostnames)
212
+ hostnames.each {|hostname| (@name2addr[hostname] ||= []) << addr}
208
213
  }
209
214
  }
210
215
  @name2addr.each {|name, arr| arr.reverse!}
@@ -403,13 +408,15 @@ class Gem::Resolv
403
408
  # be a Gem::Resolv::IPv4 or Gem::Resolv::IPv6
404
409
 
405
410
  def each_address(name)
406
- each_resource(name, Resource::IN::A) {|resource| yield resource.address}
407
411
  if use_ipv6?
408
412
  each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address}
409
413
  end
414
+ each_resource(name, Resource::IN::A) {|resource| yield resource.address}
410
415
  end
411
416
 
412
417
  def use_ipv6? # :nodoc:
418
+ @config.lazy_initialize unless @config.instance_variable_get(:@initialized)
419
+
413
420
  use_ipv6 = @config.use_ipv6?
414
421
  unless use_ipv6.nil?
415
422
  return use_ipv6
@@ -520,35 +527,40 @@ class Gem::Resolv
520
527
 
521
528
  def fetch_resource(name, typeclass)
522
529
  lazy_initialize
523
- begin
524
- requester = make_udp_requester
530
+ truncated = {}
531
+ requesters = {}
532
+ udp_requester = begin
533
+ make_udp_requester
525
534
  rescue Errno::EACCES
526
535
  # fall back to TCP
527
536
  end
528
537
  senders = {}
538
+
529
539
  begin
530
- @config.resolv(name) {|candidate, tout, nameserver, port|
531
- requester ||= make_tcp_requester(nameserver, port)
540
+ @config.resolv(name) do |candidate, tout, nameserver, port|
532
541
  msg = Message.new
533
542
  msg.rd = 1
534
543
  msg.add_question(candidate, typeclass)
535
- unless sender = senders[[candidate, nameserver, port]]
544
+
545
+ requester = requesters.fetch([nameserver, port]) do
546
+ if !truncated[candidate] && udp_requester
547
+ udp_requester
548
+ else
549
+ requesters[[nameserver, port]] = make_tcp_requester(nameserver, port)
550
+ end
551
+ end
552
+
553
+ unless sender = senders[[candidate, requester, nameserver, port]]
536
554
  sender = requester.sender(msg, candidate, nameserver, port)
537
555
  next if !sender
538
- senders[[candidate, nameserver, port]] = sender
556
+ senders[[candidate, requester, nameserver, port]] = sender
539
557
  end
540
558
  reply, reply_name = requester.request(sender, tout)
541
559
  case reply.rcode
542
560
  when RCode::NoError
543
561
  if reply.tc == 1 and not Requester::TCP === requester
544
- requester.close
545
562
  # Retry via TCP:
546
- requester = make_tcp_requester(nameserver, port)
547
- senders = {}
548
- # This will use TCP for all remaining candidates (assuming the
549
- # current candidate does not already respond successfully via
550
- # TCP). This makes sense because we already know the full
551
- # response will not fit in an untruncated UDP packet.
563
+ truncated[candidate] = true
552
564
  redo
553
565
  else
554
566
  yield(reply, reply_name)
@@ -559,9 +571,10 @@ class Gem::Resolv
559
571
  else
560
572
  raise Config::OtherResolvError.new(reply_name.to_s)
561
573
  end
562
- }
574
+ end
563
575
  ensure
564
- requester&.close
576
+ udp_requester&.close
577
+ requesters.each_value { |requester| requester&.close }
565
578
  end
566
579
  end
567
580
 
@@ -576,6 +589,11 @@ class Gem::Resolv
576
589
 
577
590
  def make_tcp_requester(host, port) # :nodoc:
578
591
  return Requester::TCP.new(host, port)
592
+ rescue Errno::ECONNREFUSED
593
+ # Treat a refused TCP connection attempt to a nameserver like a timeout,
594
+ # as Gem::Resolv::DNS::Config#resolv considers ResolvTimeout exceptions as a
595
+ # hint to try the next nameserver:
596
+ raise ResolvTimeout
579
597
  end
580
598
 
581
599
  def extract_resources(msg, name, typeclass) # :nodoc:
@@ -609,16 +627,10 @@ class Gem::Resolv
609
627
  }
610
628
  end
611
629
 
612
- if defined? SecureRandom
613
- def self.random(arg) # :nodoc:
614
- begin
615
- SecureRandom.random_number(arg)
616
- rescue NotImplementedError
617
- rand(arg)
618
- end
619
- end
620
- else
621
- def self.random(arg) # :nodoc:
630
+ def self.random(arg) # :nodoc:
631
+ begin
632
+ Gem::SecureRandom.random_number(arg)
633
+ rescue NotImplementedError
622
634
  rand(arg)
623
635
  end
624
636
  end
@@ -650,8 +662,20 @@ class Gem::Resolv
650
662
  }
651
663
  end
652
664
 
653
- def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
654
- begin
665
+ case RUBY_PLATFORM
666
+ when *[
667
+ # https://www.rfc-editor.org/rfc/rfc6056.txt
668
+ # Appendix A. Survey of the Algorithms in Use by Some Popular Implementations
669
+ /freebsd/, /linux/, /netbsd/, /openbsd/, /solaris/,
670
+ /darwin/, # the same as FreeBSD
671
+ ] then
672
+ def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
673
+ udpsock.bind(bind_host, 0)
674
+ end
675
+ else
676
+ # Sequential port assignment
677
+ def self.bind_random_port(udpsock, bind_host="0.0.0.0") # :nodoc:
678
+ # Ephemeral port number range recommended by RFC 6056
655
679
  port = random(1024..65535)
656
680
  udpsock.bind(bind_host, port)
657
681
  rescue Errno::EADDRINUSE, # POSIX
@@ -974,13 +998,13 @@ class Gem::Resolv
974
998
  next unless keyword
975
999
  case keyword
976
1000
  when 'nameserver'
977
- nameserver.concat(args)
1001
+ nameserver.concat(args.each(&:freeze))
978
1002
  when 'domain'
979
1003
  next if args.empty?
980
- search = [args[0]]
1004
+ search = [args[0].freeze]
981
1005
  when 'search'
982
1006
  next if args.empty?
983
- search = args
1007
+ search = args.each(&:freeze)
984
1008
  when 'options'
985
1009
  args.each {|arg|
986
1010
  case arg
@@ -991,22 +1015,22 @@ class Gem::Resolv
991
1015
  end
992
1016
  }
993
1017
  }
994
- return { :nameserver => nameserver, :search => search, :ndots => ndots }
1018
+ return { :nameserver => nameserver.freeze, :search => search.freeze, :ndots => ndots.freeze }.freeze
995
1019
  end
996
1020
 
997
1021
  def Config.default_config_hash(filename="/etc/resolv.conf")
998
1022
  if File.exist? filename
999
- config_hash = Config.parse_resolv_conf(filename)
1023
+ Config.parse_resolv_conf(filename)
1024
+ elsif WINDOWS
1025
+ require 'win32/resolv' unless defined?(Win32::Resolv)
1026
+ search, nameserver = Win32::Resolv.get_resolv_info
1027
+ config_hash = {}
1028
+ config_hash[:nameserver] = nameserver if nameserver
1029
+ config_hash[:search] = [search].flatten if search
1030
+ config_hash
1000
1031
  else
1001
- if /mswin|cygwin|mingw|bccwin/ =~ RUBY_PLATFORM
1002
- require 'win32/resolv'
1003
- search, nameserver = Win32::Resolv.get_resolv_info
1004
- config_hash = {}
1005
- config_hash[:nameserver] = nameserver if nameserver
1006
- config_hash[:search] = [search].flatten if search
1007
- end
1032
+ {}
1008
1033
  end
1009
- config_hash || {}
1010
1034
  end
1011
1035
 
1012
1036
  def lazy_initialize
@@ -1655,6 +1679,7 @@ class Gem::Resolv
1655
1679
  prev_index = @index
1656
1680
  save_index = nil
1657
1681
  d = []
1682
+ size = -1
1658
1683
  while true
1659
1684
  raise DecodeError.new("limit exceeded") if @limit <= @index
1660
1685
  case @data.getbyte(@index)
@@ -1675,7 +1700,10 @@ class Gem::Resolv
1675
1700
  end
1676
1701
  @index = idx
1677
1702
  else
1678
- d << self.get_label
1703
+ l = self.get_label
1704
+ d << l
1705
+ size += 1 + l.string.bytesize
1706
+ raise DecodeError.new("name label data exceed 255 octets") if size > 255
1679
1707
  end
1680
1708
  end
1681
1709
  end
@@ -1807,7 +1835,6 @@ class Gem::Resolv
1807
1835
  end
1808
1836
  end
1809
1837
 
1810
-
1811
1838
  ##
1812
1839
  # Base class for SvcParam. [RFC9460]
1813
1840
 
@@ -2102,7 +2129,14 @@ class Gem::Resolv
2102
2129
 
2103
2130
  attr_reader :ttl
2104
2131
 
2105
- ClassHash = {} # :nodoc:
2132
+ ClassHash = Module.new do
2133
+ module_function
2134
+
2135
+ def []=(type_class_value, klass)
2136
+ type_value, class_value = type_class_value
2137
+ Resource.const_set(:"Type#{type_value}_Class#{class_value}", klass)
2138
+ end
2139
+ end
2106
2140
 
2107
2141
  def encode_rdata(msg) # :nodoc:
2108
2142
  raise NotImplementedError.new
@@ -2140,7 +2174,9 @@ class Gem::Resolv
2140
2174
  end
2141
2175
 
2142
2176
  def self.get_class(type_value, class_value) # :nodoc:
2143
- return ClassHash[[type_value, class_value]] ||
2177
+ cache = :"Type#{type_value}_Class#{class_value}"
2178
+
2179
+ return (const_defined?(cache) && const_get(cache)) ||
2144
2180
  Generic.create(type_value, class_value)
2145
2181
  end
2146
2182
 
@@ -2506,7 +2542,6 @@ class Gem::Resolv
2506
2542
 
2507
2543
  attr_reader :altitude
2508
2544
 
2509
-
2510
2545
  def encode_rdata(msg) # :nodoc:
2511
2546
  msg.put_bytes(@version)
2512
2547
  msg.put_bytes(@ssize.scalar)
@@ -2544,8 +2579,70 @@ class Gem::Resolv
2544
2579
  TypeValue = 255 # :nodoc:
2545
2580
  end
2546
2581
 
2582
+ ##
2583
+ # CAA resource record defined in RFC 8659
2584
+ #
2585
+ # These records identify certificate authority allowed to issue
2586
+ # certificates for the given domain.
2587
+
2588
+ class CAA < Resource
2589
+ TypeValue = 257
2590
+
2591
+ ##
2592
+ # Creates a new CAA for +flags+, +tag+ and +value+.
2593
+
2594
+ def initialize(flags, tag, value)
2595
+ unless (0..255) === flags
2596
+ raise ArgumentError.new('flags must be an Integer between 0 and 255')
2597
+ end
2598
+ unless (1..15) === tag.bytesize
2599
+ raise ArgumentError.new('length of tag must be between 1 and 15')
2600
+ end
2601
+
2602
+ @flags = flags
2603
+ @tag = tag
2604
+ @value = value
2605
+ end
2606
+
2607
+ ##
2608
+ # Flags for this property:
2609
+ # - Bit 0 : 0 = not critical, 1 = critical
2610
+
2611
+ attr_reader :flags
2612
+
2613
+ ##
2614
+ # Property tag ("issue", "issuewild", "iodef"...).
2615
+
2616
+ attr_reader :tag
2617
+
2618
+ ##
2619
+ # Property value.
2620
+
2621
+ attr_reader :value
2622
+
2623
+ ##
2624
+ # Whether the critical flag is set on this property.
2625
+
2626
+ def critical?
2627
+ flags & 0x80 != 0
2628
+ end
2629
+
2630
+ def encode_rdata(msg) # :nodoc:
2631
+ msg.put_pack('C', @flags)
2632
+ msg.put_string(@tag)
2633
+ msg.put_bytes(@value)
2634
+ end
2635
+
2636
+ def self.decode_rdata(msg) # :nodoc:
2637
+ flags, = msg.get_unpack('C')
2638
+ tag = msg.get_string
2639
+ value = msg.get_bytes
2640
+ self.new flags, tag, value
2641
+ end
2642
+ end
2643
+
2547
2644
  ClassInsensitiveTypes = [ # :nodoc:
2548
- NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, LOC, ANY
2645
+ NS, CNAME, SOA, PTR, HINFO, MINFO, MX, TXT, LOC, ANY, CAA
2549
2646
  ]
2550
2647
 
2551
2648
  ##
@@ -2771,7 +2868,7 @@ class Gem::Resolv
2771
2868
  attr_reader :target
2772
2869
 
2773
2870
  ##
2774
- # The service paramters for the target host.
2871
+ # The service parameters for the target host.
2775
2872
 
2776
2873
  attr_reader :params
2777
2874
 
@@ -3384,4 +3481,3 @@ class Gem::Resolv
3384
3481
  AddressRegex = /(?:#{IPv4::Regex})|(?:#{IPv6::Regex})/
3385
3482
 
3386
3483
  end
3387
-
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a. place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b. use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c. give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d. make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a. distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b. accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c. give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d. make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
@@ -0,0 +1,102 @@
1
+ # -*- coding: us-ascii -*-
2
+ # frozen_string_literal: true
3
+
4
+ require 'random/formatter'
5
+
6
+ # == Secure random number generator interface.
7
+ #
8
+ # This library is an interface to secure random number generators which are
9
+ # suitable for generating session keys in HTTP cookies, etc.
10
+ #
11
+ # You can use this library in your application by requiring it:
12
+ #
13
+ # require 'rubygems/vendor/securerandom/lib/securerandom'
14
+ #
15
+ # It supports the following secure random number generators:
16
+ #
17
+ # * openssl
18
+ # * /dev/urandom
19
+ # * Win32
20
+ #
21
+ # Gem::SecureRandom is extended by the Random::Formatter module which
22
+ # defines the following methods:
23
+ #
24
+ # * alphanumeric
25
+ # * base64
26
+ # * choose
27
+ # * gen_random
28
+ # * hex
29
+ # * rand
30
+ # * random_bytes
31
+ # * random_number
32
+ # * urlsafe_base64
33
+ # * uuid
34
+ #
35
+ # These methods are usable as class methods of Gem::SecureRandom such as
36
+ # +Gem::SecureRandom.hex+.
37
+ #
38
+ # If a secure random number generator is not available,
39
+ # +NotImplementedError+ is raised.
40
+
41
+ module Gem::SecureRandom
42
+
43
+ # The version
44
+ VERSION = "0.4.1"
45
+
46
+ class << self
47
+ # Returns a random binary string containing +size+ bytes.
48
+ #
49
+ # See Random.bytes
50
+ def bytes(n)
51
+ return gen_random(n)
52
+ end
53
+
54
+ # Compatibility methods for Ruby 3.2, we can remove this after dropping to support Ruby 3.2
55
+ def alphanumeric(n = nil, chars: ALPHANUMERIC)
56
+ n = 16 if n.nil?
57
+ choose(chars, n)
58
+ end if RUBY_VERSION < '3.3'
59
+
60
+ private
61
+
62
+ # :stopdoc:
63
+
64
+ # Implementation using OpenSSL
65
+ def gen_random_openssl(n)
66
+ return OpenSSL::Random.random_bytes(n)
67
+ end
68
+
69
+ # Implementation using system random device
70
+ def gen_random_urandom(n)
71
+ ret = Random.urandom(n)
72
+ unless ret
73
+ raise NotImplementedError, "No random device"
74
+ end
75
+ unless ret.length == n
76
+ raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
77
+ end
78
+ ret
79
+ end
80
+
81
+ begin
82
+ # Check if Random.urandom is available
83
+ Random.urandom(1)
84
+ alias gen_random gen_random_urandom
85
+ rescue RuntimeError
86
+ begin
87
+ require 'openssl'
88
+ rescue NoMethodError
89
+ raise NotImplementedError, "No random device"
90
+ else
91
+ alias gen_random gen_random_openssl
92
+ end
93
+ end
94
+
95
+ # :startdoc:
96
+
97
+ # Generate random data bytes for Random::Formatter
98
+ public :gen_random
99
+ end
100
+ end
101
+
102
+ Gem::SecureRandom.extend(Random::Formatter)
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a. place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b. use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c. give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d. make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a. distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b. accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c. give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d. make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
@@ -3,8 +3,8 @@
3
3
  #
4
4
  # == Synopsis
5
5
  #
6
- # require 'rubygems/timeout/lib/timeout'
7
- # status = Gem::Timeout::timeout(5) {
6
+ # require 'rubygems/vendor/timeout/lib/timeout'
7
+ # status = Gem::Timeout.timeout(5) {
8
8
  # # Something that should be interrupted if it takes more than 5 seconds...
9
9
  # }
10
10
  #
@@ -13,28 +13,25 @@
13
13
  # Gem::Timeout provides a way to auto-terminate a potentially long-running
14
14
  # operation if it hasn't finished in a fixed amount of time.
15
15
  #
16
- # Previous versions didn't use a module for namespacing, however
17
- # #timeout is provided for backwards compatibility. You
18
- # should prefer Gem::Timeout.timeout instead.
19
- #
20
16
  # == Copyright
21
17
  #
22
18
  # Copyright:: (C) 2000 Network Applied Communication Laboratory, Inc.
23
19
  # Copyright:: (C) 2000 Information-technology Promotion Agency, Japan
24
20
 
25
21
  module Gem::Timeout
26
- VERSION = "0.4.1"
22
+ # The version
23
+ VERSION = "0.4.3"
27
24
 
28
25
  # Internal error raised to when a timeout is triggered.
29
26
  class ExitException < Exception
30
- def exception(*)
27
+ def exception(*) # :nodoc:
31
28
  self
32
29
  end
33
30
  end
34
31
 
35
32
  # Raised by Gem::Timeout.timeout when the block times out.
36
33
  class Error < RuntimeError
37
- def self.handle_timeout(message)
34
+ def self.handle_timeout(message) # :nodoc:
38
35
  exc = ExitException.new(message)
39
36
 
40
37
  begin
@@ -144,9 +141,10 @@ module Gem::Timeout
144
141
  # Perform an operation in a block, raising an error if it takes longer than
145
142
  # +sec+ seconds to complete.
146
143
  #
147
- # +sec+:: Number of seconds to wait for the block to terminate. Any number
148
- # may be used, including Floats to specify fractional seconds. A
144
+ # +sec+:: Number of seconds to wait for the block to terminate. Any non-negative number
145
+ # or nil may be used, including Floats to specify fractional seconds. A
149
146
  # value of 0 or +nil+ will execute the block without any timeout.
147
+ # Any negative number will raise an ArgumentError.
150
148
  # +klass+:: Exception Class to raise if the block fails to terminate
151
149
  # in +sec+ seconds. Omitting will use the default, Gem::Timeout::Error
152
150
  # +message+:: Error message to raise with Exception Class.
@@ -168,6 +166,7 @@ module Gem::Timeout
168
166
  # a module method, so you can call it directly as Gem::Timeout.timeout().
169
167
  def timeout(sec, klass = nil, message = nil, &block) #:yield: +sec+
170
168
  return yield(sec) if sec == nil or sec.zero?
169
+ raise ArgumentError, "Timeout sec must be a non-negative number" if 0 > sec
171
170
 
172
171
  message ||= "execution expired"
173
172