rubygems-update 3.4.22 → 3.5.0

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 (528) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +99 -2
  3. data/Manifest.txt +34 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +53 -0
  6. data/bundler/bundler.gemspec +4 -2
  7. data/bundler/exe/bundle +1 -10
  8. data/bundler/lib/bundler/build_metadata.rb +3 -3
  9. data/bundler/lib/bundler/capistrano.rb +1 -1
  10. data/bundler/lib/bundler/checksum.rb +245 -0
  11. data/bundler/lib/bundler/ci_detector.rb +75 -0
  12. data/bundler/lib/bundler/cli/add.rb +3 -3
  13. data/bundler/lib/bundler/cli/binstubs.rb +4 -4
  14. data/bundler/lib/bundler/cli/cache.rb +1 -1
  15. data/bundler/lib/bundler/cli/check.rb +1 -1
  16. data/bundler/lib/bundler/cli/common.rb +9 -1
  17. data/bundler/lib/bundler/cli/config.rb +8 -7
  18. data/bundler/lib/bundler/cli/console.rb +3 -2
  19. data/bundler/lib/bundler/cli/doctor.rb +2 -2
  20. data/bundler/lib/bundler/cli/exec.rb +1 -1
  21. data/bundler/lib/bundler/cli/gem.rb +28 -23
  22. data/bundler/lib/bundler/cli/info.rb +2 -13
  23. data/bundler/lib/bundler/cli/install.rb +5 -4
  24. data/bundler/lib/bundler/cli/issue.rb +1 -1
  25. data/bundler/lib/bundler/cli/lock.rb +4 -4
  26. data/bundler/lib/bundler/cli/open.rb +1 -1
  27. data/bundler/lib/bundler/cli/outdated.rb +6 -6
  28. data/bundler/lib/bundler/cli/plugin.rb +7 -14
  29. data/bundler/lib/bundler/cli/pristine.rb +38 -30
  30. data/bundler/lib/bundler/cli/show.rb +2 -2
  31. data/bundler/lib/bundler/cli/update.rb +5 -5
  32. data/bundler/lib/bundler/cli.rb +215 -263
  33. data/bundler/lib/bundler/compact_index_client/cache.rb +29 -9
  34. data/bundler/lib/bundler/compact_index_client/cache_file.rb +153 -0
  35. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +7 -3
  36. data/bundler/lib/bundler/compact_index_client/updater.rb +79 -81
  37. data/bundler/lib/bundler/compact_index_client.rb +14 -7
  38. data/bundler/lib/bundler/constants.rb +1 -1
  39. data/bundler/lib/bundler/current_ruby.rb +5 -21
  40. data/bundler/lib/bundler/definition.rb +42 -15
  41. data/bundler/lib/bundler/dependency.rb +16 -12
  42. data/bundler/lib/bundler/digest.rb +2 -2
  43. data/bundler/lib/bundler/dsl.rb +43 -25
  44. data/bundler/lib/bundler/endpoint_specification.rb +5 -1
  45. data/bundler/lib/bundler/env.rb +1 -3
  46. data/bundler/lib/bundler/errors.rb +43 -0
  47. data/bundler/lib/bundler/fetcher/base.rb +3 -1
  48. data/bundler/lib/bundler/fetcher/compact_index.rb +4 -4
  49. data/bundler/lib/bundler/fetcher/downloader.rb +13 -11
  50. data/bundler/lib/bundler/fetcher/gem_remote_fetcher.rb +16 -0
  51. data/bundler/lib/bundler/fetcher/index.rb +1 -1
  52. data/bundler/lib/bundler/fetcher.rb +28 -25
  53. data/bundler/lib/bundler/friendly_errors.rb +5 -5
  54. data/bundler/lib/bundler/gem_helper.rb +1 -1
  55. data/bundler/lib/bundler/gem_helpers.rb +5 -2
  56. data/bundler/lib/bundler/graph.rb +9 -9
  57. data/bundler/lib/bundler/index.rb +1 -2
  58. data/bundler/lib/bundler/injector.rb +1 -1
  59. data/bundler/lib/bundler/inline.rb +3 -3
  60. data/bundler/lib/bundler/installer/gem_installer.rb +5 -5
  61. data/bundler/lib/bundler/installer/parallel_installer.rb +16 -8
  62. data/bundler/lib/bundler/installer/standalone.rb +2 -3
  63. data/bundler/lib/bundler/installer.rb +9 -9
  64. data/bundler/lib/bundler/lazy_specification.rb +24 -17
  65. data/bundler/lib/bundler/lockfile_generator.rb +9 -0
  66. data/bundler/lib/bundler/lockfile_parser.rb +81 -10
  67. data/bundler/lib/bundler/man/bundle-add.1 +3 -26
  68. data/bundler/lib/bundler/man/bundle-binstubs.1 +4 -16
  69. data/bundler/lib/bundler/man/bundle-cache.1 +3 -24
  70. data/bundler/lib/bundler/man/bundle-check.1 +3 -12
  71. data/bundler/lib/bundler/man/bundle-clean.1 +3 -10
  72. data/bundler/lib/bundler/man/bundle-config.1 +20 -211
  73. data/bundler/lib/bundler/man/bundle-config.1.ronn +6 -0
  74. data/bundler/lib/bundler/man/bundle-console.1 +4 -22
  75. data/bundler/lib/bundler/man/bundle-doctor.1 +4 -18
  76. data/bundler/lib/bundler/man/bundle-exec.1 +12 -73
  77. data/bundler/lib/bundler/man/bundle-gem.1 +13 -49
  78. data/bundler/lib/bundler/man/bundle-help.1 +3 -7
  79. data/bundler/lib/bundler/man/bundle-info.1 +3 -9
  80. data/bundler/lib/bundler/man/bundle-init.1 +3 -12
  81. data/bundler/lib/bundler/man/bundle-inject.1 +6 -19
  82. data/bundler/lib/bundler/man/bundle-install.1 +27 -125
  83. data/bundler/lib/bundler/man/bundle-install.1.ronn +1 -0
  84. data/bundler/lib/bundler/man/bundle-list.1 +4 -19
  85. data/bundler/lib/bundler/man/bundle-lock.1 +5 -29
  86. data/bundler/lib/bundler/man/bundle-open.1 +7 -27
  87. data/bundler/lib/bundler/man/bundle-outdated.1 +3 -55
  88. data/bundler/lib/bundler/man/bundle-outdated.1.ronn +1 -0
  89. data/bundler/lib/bundler/man/bundle-platform.1 +5 -27
  90. data/bundler/lib/bundler/man/bundle-plugin.1 +3 -29
  91. data/bundler/lib/bundler/man/bundle-pristine.1 +5 -16
  92. data/bundler/lib/bundler/man/bundle-remove.1 +4 -14
  93. data/bundler/lib/bundler/man/bundle-show.1 +3 -10
  94. data/bundler/lib/bundler/man/bundle-update.1 +18 -137
  95. data/bundler/lib/bundler/man/bundle-version.1 +3 -16
  96. data/bundler/lib/bundler/man/bundle-viz.1 +4 -16
  97. data/bundler/lib/bundler/man/bundle.1 +5 -44
  98. data/bundler/lib/bundler/man/gemfile.5 +24 -301
  99. data/bundler/lib/bundler/man/gemfile.5.ronn +4 -0
  100. data/bundler/lib/bundler/match_metadata.rb +4 -0
  101. data/bundler/lib/bundler/match_platform.rb +1 -1
  102. data/bundler/lib/bundler/plugin/api/source.rb +3 -2
  103. data/bundler/lib/bundler/plugin/installer.rb +1 -1
  104. data/bundler/lib/bundler/plugin.rb +3 -3
  105. data/bundler/lib/bundler/resolver/base.rb +1 -1
  106. data/bundler/lib/bundler/resolver/incompatibility.rb +1 -1
  107. data/bundler/lib/bundler/resolver/spec_group.rb +1 -4
  108. data/bundler/lib/bundler/resolver.rb +16 -16
  109. data/bundler/lib/bundler/ruby_dsl.rb +20 -12
  110. data/bundler/lib/bundler/ruby_version.rb +1 -1
  111. data/bundler/lib/bundler/rubygems_ext.rb +24 -50
  112. data/bundler/lib/bundler/rubygems_gem_installer.rb +6 -56
  113. data/bundler/lib/bundler/rubygems_integration.rb +25 -94
  114. data/bundler/lib/bundler/runtime.rb +2 -2
  115. data/bundler/lib/bundler/self_manager.rb +23 -7
  116. data/bundler/lib/bundler/settings.rb +27 -7
  117. data/bundler/lib/bundler/setup.rb +4 -1
  118. data/bundler/lib/bundler/shared_helpers.rb +35 -13
  119. data/bundler/lib/bundler/source/git/git_proxy.rb +15 -15
  120. data/bundler/lib/bundler/source/git.rb +4 -3
  121. data/bundler/lib/bundler/source/metadata.rb +15 -15
  122. data/bundler/lib/bundler/source/path.rb +7 -6
  123. data/bundler/lib/bundler/source/rubygems.rb +21 -14
  124. data/bundler/lib/bundler/source.rb +2 -0
  125. data/bundler/lib/bundler/spec_set.rb +38 -10
  126. data/bundler/lib/bundler/stub_specification.rb +1 -0
  127. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  128. data/bundler/lib/bundler/templates/newgem/README.md.tt +3 -3
  129. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +2 -6
  130. data/bundler/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +1 -1
  131. data/bundler/lib/bundler/templates/newgem/standard.yml.tt +1 -1
  132. data/bundler/lib/bundler/ui/shell.rb +1 -1
  133. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  135. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  136. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  137. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  138. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +35 -35
  140. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  141. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  142. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  143. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  144. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  145. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  146. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  147. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  148. data/bundler/lib/bundler/version.rb +1 -1
  149. data/bundler/lib/bundler/vlad.rb +1 -1
  150. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  151. data/bundler/lib/bundler.rb +38 -27
  152. data/lib/rubygems/available_set.rb +4 -4
  153. data/lib/rubygems/basic_specification.rb +35 -37
  154. data/lib/rubygems/bundler_version_finder.rb +4 -4
  155. data/lib/rubygems/ci_detector.rb +75 -0
  156. data/lib/rubygems/command.rb +13 -15
  157. data/lib/rubygems/command_manager.rb +5 -4
  158. data/lib/rubygems/commands/build_command.rb +2 -2
  159. data/lib/rubygems/commands/cert_command.rb +1 -2
  160. data/lib/rubygems/commands/check_command.rb +4 -4
  161. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  162. data/lib/rubygems/commands/contents_command.rb +4 -4
  163. data/lib/rubygems/commands/dependency_command.rb +4 -5
  164. data/lib/rubygems/commands/environment_command.rb +1 -3
  165. data/lib/rubygems/commands/exec_command.rb +1 -1
  166. data/lib/rubygems/commands/fetch_command.rb +2 -2
  167. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  168. data/lib/rubygems/commands/help_command.rb +3 -3
  169. data/lib/rubygems/commands/info_command.rb +2 -2
  170. data/lib/rubygems/commands/install_command.rb +8 -16
  171. data/lib/rubygems/commands/list_command.rb +2 -2
  172. data/lib/rubygems/commands/lock_command.rb +1 -1
  173. data/lib/rubygems/commands/open_command.rb +1 -1
  174. data/lib/rubygems/commands/owner_command.rb +1 -1
  175. data/lib/rubygems/commands/pristine_command.rb +13 -15
  176. data/lib/rubygems/commands/push_command.rb +2 -2
  177. data/lib/rubygems/commands/query_command.rb +4 -5
  178. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  179. data/lib/rubygems/commands/search_command.rb +2 -2
  180. data/lib/rubygems/commands/setup_command.rb +31 -34
  181. data/lib/rubygems/commands/sources_command.rb +12 -12
  182. data/lib/rubygems/commands/specification_command.rb +10 -10
  183. data/lib/rubygems/commands/stale_command.rb +1 -1
  184. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  185. data/lib/rubygems/commands/unpack_command.rb +4 -4
  186. data/lib/rubygems/commands/update_command.rb +10 -12
  187. data/lib/rubygems/commands/which_command.rb +1 -1
  188. data/lib/rubygems/commands/yank_command.rb +1 -1
  189. data/lib/rubygems/compatibility.rb +5 -6
  190. data/lib/rubygems/config_file.rb +4 -4
  191. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  192. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  193. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  194. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  195. data/lib/rubygems/defaults.rb +15 -3
  196. data/lib/rubygems/dependency.rb +12 -14
  197. data/lib/rubygems/dependency_installer.rb +29 -30
  198. data/lib/rubygems/dependency_list.rb +1 -1
  199. data/lib/rubygems/deprecate.rb +16 -15
  200. data/lib/rubygems/doctor.rb +5 -5
  201. data/lib/rubygems/errors.rb +2 -6
  202. data/lib/rubygems/exceptions.rb +2 -1
  203. data/lib/rubygems/ext/builder.rb +15 -10
  204. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  205. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  206. data/lib/rubygems/gem_runner.rb +4 -4
  207. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  208. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  209. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  210. data/lib/rubygems/install_update_options.rb +18 -19
  211. data/lib/rubygems/installer.rb +59 -33
  212. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  213. data/lib/rubygems/local_remote_options.rb +7 -10
  214. data/lib/rubygems/name_tuple.rb +7 -9
  215. data/lib/rubygems/net/http.rb +3 -0
  216. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  217. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  218. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  219. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  220. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  221. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  222. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  223. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  224. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  225. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  226. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  227. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  228. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  229. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  230. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  231. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  232. data/lib/rubygems/package/old.rb +2 -2
  233. data/lib/rubygems/package/tar_header.rb +45 -39
  234. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  235. data/lib/rubygems/package/tar_reader.rb +5 -3
  236. data/lib/rubygems/package/tar_writer.rb +19 -17
  237. data/lib/rubygems/package.rb +27 -26
  238. data/lib/rubygems/package_task.rb +2 -2
  239. data/lib/rubygems/path_support.rb +9 -10
  240. data/lib/rubygems/platform.rb +60 -45
  241. data/lib/rubygems/query_utils.rb +7 -9
  242. data/lib/rubygems/remote_fetcher.rb +15 -15
  243. data/lib/rubygems/request/connection_pools.rb +3 -3
  244. data/lib/rubygems/request.rb +20 -17
  245. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  246. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  247. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  248. data/lib/rubygems/request_set/lockfile.rb +6 -11
  249. data/lib/rubygems/request_set.rb +5 -5
  250. data/lib/rubygems/requirement.rb +7 -7
  251. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  252. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  253. data/lib/rubygems/resolver/activation_request.rb +1 -3
  254. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  255. data/lib/rubygems/resolver/best_set.rb +1 -1
  256. data/lib/rubygems/resolver/composed_set.rb +1 -1
  257. data/lib/rubygems/resolver/conflict.rb +4 -12
  258. data/lib/rubygems/resolver/index_set.rb +4 -4
  259. data/lib/rubygems/resolver/index_specification.rb +2 -2
  260. data/lib/rubygems/resolver/installer_set.rb +5 -6
  261. data/lib/rubygems/resolver/lock_set.rb +1 -1
  262. data/lib/rubygems/resolver.rb +3 -10
  263. data/lib/rubygems/s3_uri_signer.rb +6 -6
  264. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  265. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  266. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  267. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  268. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  269. data/lib/rubygems/safe_marshal.rb +74 -0
  270. data/lib/rubygems/safe_yaml.rb +5 -28
  271. data/lib/rubygems/security/policies.rb +36 -38
  272. data/lib/rubygems/security/policy.rb +7 -11
  273. data/lib/rubygems/security/signer.rb +1 -1
  274. data/lib/rubygems/security/trust_dir.rb +3 -3
  275. data/lib/rubygems/security.rb +8 -22
  276. data/lib/rubygems/source/git.rb +1 -3
  277. data/lib/rubygems/source/installed.rb +0 -2
  278. data/lib/rubygems/source/local.rb +5 -8
  279. data/lib/rubygems/source/lock.rb +1 -3
  280. data/lib/rubygems/source/specific_file.rb +0 -1
  281. data/lib/rubygems/source/vendor.rb +0 -2
  282. data/lib/rubygems/source.rb +12 -12
  283. data/lib/rubygems/source_list.rb +4 -4
  284. data/lib/rubygems/spec_fetcher.rb +29 -29
  285. data/lib/rubygems/specification.rb +125 -138
  286. data/lib/rubygems/specification_policy.rb +55 -25
  287. data/lib/rubygems/stub_specification.rb +4 -5
  288. data/lib/rubygems/text.rb +1 -2
  289. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  290. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  291. data/lib/rubygems/timeout.rb +3 -0
  292. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  293. data/lib/rubygems/uninstaller.rb +7 -9
  294. data/lib/rubygems/update_suggestion.rb +5 -18
  295. data/lib/rubygems/uri_formatter.rb +1 -1
  296. data/lib/rubygems/user_interaction.rb +15 -21
  297. data/lib/rubygems/util/licenses.rb +65 -35
  298. data/lib/rubygems/util/list.rb +3 -1
  299. data/lib/rubygems/util.rb +2 -4
  300. data/lib/rubygems/validator.rb +5 -3
  301. data/lib/rubygems/version.rb +34 -28
  302. data/lib/rubygems/version_option.rb +2 -5
  303. data/lib/rubygems/yaml_serializer.rb +3 -3
  304. data/lib/rubygems.rb +37 -37
  305. data/rubygems-update.gemspec +4 -4
  306. data/setup.rb +2 -2
  307. metadata +38 -225
  308. data/lib/rubygems/indexer.rb +0 -428
  309. data/lib/rubygems/mock_gem_ui.rb +0 -86
  310. data/test/rubygems/alternate_cert.pem +0 -19
  311. data/test/rubygems/alternate_cert_32.pem +0 -19
  312. data/test/rubygems/alternate_key.pem +0 -27
  313. data/test/rubygems/bad_rake.rb +0 -3
  314. data/test/rubygems/bundler_test_gem.rb +0 -424
  315. data/test/rubygems/ca_cert.pem +0 -77
  316. data/test/rubygems/child_cert.pem +0 -19
  317. data/test/rubygems/child_cert_32.pem +0 -19
  318. data/test/rubygems/child_key.pem +0 -27
  319. data/test/rubygems/client.pem +0 -107
  320. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  321. data/test/rubygems/data/gem-private_key.pem +0 -27
  322. data/test/rubygems/data/gem-public_cert.pem +0 -20
  323. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  324. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  325. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  326. data/test/rubygems/encrypted_private_key.pem +0 -30
  327. data/test/rubygems/expired_cert.pem +0 -19
  328. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  329. data/test/rubygems/foo/discover.rb +0 -1
  330. data/test/rubygems/future_cert.pem +0 -19
  331. data/test/rubygems/future_cert_32.pem +0 -19
  332. data/test/rubygems/good_rake.rb +0 -3
  333. data/test/rubygems/grandchild_cert.pem +0 -19
  334. data/test/rubygems/grandchild_cert_32.pem +0 -19
  335. data/test/rubygems/grandchild_key.pem +0 -27
  336. data/test/rubygems/helper.rb +0 -1649
  337. data/test/rubygems/installer_test_case.rb +0 -248
  338. data/test/rubygems/invalid_client.pem +0 -49
  339. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  340. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  341. data/test/rubygems/invalid_key.pem +0 -27
  342. data/test/rubygems/invalid_signer_cert.pem +0 -19
  343. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  344. data/test/rubygems/invalidchild_cert.pem +0 -19
  345. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  346. data/test/rubygems/invalidchild_key.pem +0 -27
  347. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  348. data/test/rubygems/package/tar_test_case.rb +0 -175
  349. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  350. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  351. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  352. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  353. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  354. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  355. data/test/rubygems/private3072_key.pem +0 -40
  356. data/test/rubygems/private_ec_key.pem +0 -9
  357. data/test/rubygems/private_key.pem +0 -27
  358. data/test/rubygems/public3072_cert.pem +0 -25
  359. data/test/rubygems/public_cert.pem +0 -20
  360. data/test/rubygems/public_cert_32.pem +0 -19
  361. data/test/rubygems/public_key.pem +0 -9
  362. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  363. data/test/rubygems/rubygems_plugin.rb +0 -24
  364. data/test/rubygems/sff/discover.rb +0 -1
  365. data/test/rubygems/simple_gem.rb +0 -68
  366. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  367. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  368. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  369. data/test/rubygems/ssl_cert.pem +0 -80
  370. data/test/rubygems/ssl_key.pem +0 -27
  371. data/test/rubygems/test_bundled_ca.rb +0 -61
  372. data/test/rubygems/test_config.rb +0 -28
  373. data/test/rubygems/test_deprecate.rb +0 -158
  374. data/test/rubygems/test_exit.rb +0 -17
  375. data/test/rubygems/test_gem.rb +0 -1799
  376. data/test/rubygems/test_gem_available_set.rb +0 -130
  377. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  378. data/test/rubygems/test_gem_command.rb +0 -403
  379. data/test/rubygems/test_gem_command_manager.rb +0 -400
  380. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  381. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  382. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  383. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  384. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  385. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  386. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  387. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  388. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  389. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  390. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  391. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  392. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  393. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  394. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  395. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  396. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  397. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  398. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  399. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  400. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  401. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  402. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  403. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  404. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  405. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  406. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  407. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  408. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  409. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  410. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  411. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  412. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  413. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  414. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  415. data/test/rubygems/test_gem_config_file.rb +0 -551
  416. data/test/rubygems/test_gem_dependency.rb +0 -398
  417. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  418. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  419. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  420. data/test/rubygems/test_gem_doctor.rb +0 -195
  421. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  422. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  423. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  424. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  425. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  426. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  427. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  428. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  429. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  430. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  431. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  432. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  433. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  434. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  435. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  436. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  437. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  438. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  439. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  440. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  441. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  442. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  443. data/test/rubygems/test_gem_indexer.rb +0 -381
  444. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  445. data/test/rubygems/test_gem_installer.rb +0 -2512
  446. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  447. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  448. data/test/rubygems/test_gem_package.rb +0 -1306
  449. data/test/rubygems/test_gem_package_old.rb +0 -91
  450. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  451. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  452. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  453. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  454. data/test/rubygems/test_gem_package_task.rb +0 -118
  455. data/test/rubygems/test_gem_path_support.rb +0 -139
  456. data/test/rubygems/test_gem_platform.rb +0 -497
  457. data/test/rubygems/test_gem_rdoc.rb +0 -137
  458. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  459. data/test/rubygems/test_gem_request.rb +0 -547
  460. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  461. data/test/rubygems/test_gem_request_set.rb +0 -672
  462. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  463. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  464. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  465. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  466. data/test/rubygems/test_gem_requirement.rb +0 -505
  467. data/test/rubygems/test_gem_resolver.rb +0 -859
  468. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  469. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  470. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  471. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  472. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  473. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  474. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  475. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  476. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  477. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  478. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  479. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  480. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  481. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  482. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  483. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  484. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  485. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  486. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  487. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  488. data/test/rubygems/test_gem_security.rb +0 -341
  489. data/test/rubygems/test_gem_security_policy.rb +0 -535
  490. data/test/rubygems/test_gem_security_signer.rb +0 -218
  491. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  492. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  493. data/test/rubygems/test_gem_source.rb +0 -254
  494. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  495. data/test/rubygems/test_gem_source_git.rb +0 -310
  496. data/test/rubygems/test_gem_source_installed.rb +0 -35
  497. data/test/rubygems/test_gem_source_list.rb +0 -119
  498. data/test/rubygems/test_gem_source_local.rb +0 -107
  499. data/test/rubygems/test_gem_source_lock.rb +0 -113
  500. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  501. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  502. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  503. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  504. data/test/rubygems/test_gem_specification.rb +0 -3856
  505. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  506. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  507. data/test/rubygems/test_gem_text.rb +0 -103
  508. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  509. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  510. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  511. data/test/rubygems/test_gem_uri.rb +0 -41
  512. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  513. data/test/rubygems/test_gem_util.rb +0 -91
  514. data/test/rubygems/test_gem_validator.rb +0 -42
  515. data/test/rubygems/test_gem_version.rb +0 -305
  516. data/test/rubygems/test_gem_version_option.rb +0 -165
  517. data/test/rubygems/test_kernel.rb +0 -124
  518. data/test/rubygems/test_project_sanity.rb +0 -49
  519. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  520. data/test/rubygems/test_require.rb +0 -732
  521. data/test/rubygems/test_rubygems.rb +0 -76
  522. data/test/rubygems/test_webauthn_listener.rb +0 -143
  523. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  524. data/test/rubygems/test_webauthn_poller.rb +0 -124
  525. data/test/rubygems/utilities.rb +0 -436
  526. data/test/rubygems/wrong_key_cert.pem +0 -19
  527. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  528. data/test/test_changelog_generator.rb +0 -17
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gem::SafeMarshal::Visitors
4
+ class Visitor
5
+ def visit(target)
6
+ send DISPATCH.fetch(target.class), target
7
+ end
8
+
9
+ private
10
+
11
+ DISPATCH = Gem::SafeMarshal::Elements.constants.each_with_object({}) do |c, h|
12
+ next if c == :Element
13
+
14
+ klass = Gem::SafeMarshal::Elements.const_get(c)
15
+ h[klass] = :"visit_#{klass.name.gsub("::", "_")}"
16
+ h.default = :visit_unknown_element
17
+ end.compare_by_identity.freeze
18
+ private_constant :DISPATCH
19
+
20
+ def visit_unknown_element(e)
21
+ raise ArgumentError, "Attempting to visit unknown element #{e.inspect}"
22
+ end
23
+
24
+ def visit_Gem_SafeMarshal_Elements_Array(target)
25
+ target.elements.each {|e| visit(e) }
26
+ end
27
+
28
+ def visit_Gem_SafeMarshal_Elements_Bignum(target); end
29
+ def visit_Gem_SafeMarshal_Elements_False(target); end
30
+ def visit_Gem_SafeMarshal_Elements_Float(target); end
31
+
32
+ def visit_Gem_SafeMarshal_Elements_Hash(target)
33
+ target.pairs.each do |k, v|
34
+ visit(k)
35
+ visit(v)
36
+ end
37
+ end
38
+
39
+ def visit_Gem_SafeMarshal_Elements_HashWithDefaultValue(target)
40
+ visit_Gem_SafeMarshal_Elements_Hash(target)
41
+ visit(target.default)
42
+ end
43
+
44
+ def visit_Gem_SafeMarshal_Elements_Integer(target); end
45
+ def visit_Gem_SafeMarshal_Elements_Nil(target); end
46
+
47
+ def visit_Gem_SafeMarshal_Elements_Object(target)
48
+ visit(target.name)
49
+ end
50
+
51
+ def visit_Gem_SafeMarshal_Elements_ObjectLink(target); end
52
+ def visit_Gem_SafeMarshal_Elements_String(target); end
53
+ def visit_Gem_SafeMarshal_Elements_Symbol(target); end
54
+ def visit_Gem_SafeMarshal_Elements_SymbolLink(target); end
55
+ def visit_Gem_SafeMarshal_Elements_True(target); end
56
+
57
+ def visit_Gem_SafeMarshal_Elements_UserDefined(target)
58
+ visit(target.name)
59
+ end
60
+
61
+ def visit_Gem_SafeMarshal_Elements_UserMarshal(target)
62
+ visit(target.name)
63
+ visit(target.data)
64
+ end
65
+
66
+ def visit_Gem_SafeMarshal_Elements_WithIvars(target)
67
+ visit(target.object)
68
+ target.ivars.each do |k, v|
69
+ visit(k)
70
+ visit(v)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "stringio"
4
+
5
+ require_relative "safe_marshal/reader"
6
+ require_relative "safe_marshal/visitors/to_ruby"
7
+
8
+ module Gem
9
+ ###
10
+ # This module is used for safely loading Marshal specs from a gem. The
11
+ # `safe_load` method defined on this module is specifically designed for
12
+ # loading Gem specifications.
13
+
14
+ module SafeMarshal
15
+ PERMITTED_CLASSES = %w[
16
+ Date
17
+ Time
18
+ Rational
19
+
20
+ Gem::Dependency
21
+ Gem::NameTuple
22
+ Gem::Platform
23
+ Gem::Requirement
24
+ Gem::Specification
25
+ Gem::Version
26
+ Gem::Version::Requirement
27
+
28
+ YAML::Syck::DefaultKey
29
+ YAML::PrivateType
30
+ ].freeze
31
+ private_constant :PERMITTED_CLASSES
32
+
33
+ PERMITTED_SYMBOLS = %w[
34
+ development
35
+ runtime
36
+
37
+ name
38
+ number
39
+ platform
40
+ dependencies
41
+ ].freeze
42
+ private_constant :PERMITTED_SYMBOLS
43
+
44
+ PERMITTED_IVARS = {
45
+ "String" => %w[E encoding @taguri @debug_created_info],
46
+ "Time" => %w[
47
+ offset zone nano_num nano_den submicro
48
+ @_zone @marshal_with_utc_coercion
49
+ ],
50
+ "Gem::Dependency" => %w[
51
+ @name @requirement @prerelease @version_requirement @version_requirements @type
52
+ @force_ruby_platform
53
+ ],
54
+ "Gem::NameTuple" => %w[@name @version @platform],
55
+ "Gem::Platform" => %w[@os @cpu @version],
56
+ "Psych::PrivateType" => %w[@value @type_id],
57
+ }.freeze
58
+ private_constant :PERMITTED_IVARS
59
+
60
+ def self.safe_load(input)
61
+ load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, permitted_ivars: PERMITTED_IVARS)
62
+ end
63
+
64
+ def self.load(input, permitted_classes: [::Symbol], permitted_symbols: [], permitted_ivars: {})
65
+ root = Reader.new(StringIO.new(input, "r").binmode).read!
66
+
67
+ Visitors::ToRuby.new(
68
+ permitted_classes: permitted_classes,
69
+ permitted_symbols: permitted_symbols,
70
+ permitted_ivars: permitted_ivars,
71
+ ).visit(root)
72
+ end
73
+ end
74
+ end
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gem
4
-
5
4
  ###
6
5
  # This module is used for safely loading YAML specs from a gem. The
7
6
  # `safe_load` method defined on this module is specifically designed for
@@ -26,34 +25,12 @@ module Gem
26
25
  runtime
27
26
  ].freeze
28
27
 
29
- if ::Psych.respond_to? :safe_load
30
- def self.safe_load(input)
31
- if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("3.1.0.pre1")
32
- ::Psych.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: true)
33
- else
34
- ::Psych.safe_load(input, PERMITTED_CLASSES, PERMITTED_SYMBOLS, true)
35
- end
36
- end
37
-
38
- def self.load(input)
39
- if Gem::Version.new(Psych::VERSION) >= Gem::Version.new("3.1.0.pre1")
40
- ::Psych.safe_load(input, permitted_classes: [::Symbol])
41
- else
42
- ::Psych.safe_load(input, [::Symbol])
43
- end
44
- end
45
- else
46
- unless Gem::Deprecate.skip
47
- warn "Psych safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0)."
48
- end
49
-
50
- def self.safe_load(input, *args)
51
- ::Psych.load input
52
- end
28
+ def self.safe_load(input)
29
+ ::Psych.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: true)
30
+ end
53
31
 
54
- def self.load(input)
55
- ::Psych.load input
56
- end
32
+ def self.load(input)
33
+ ::Psych.safe_load(input, permitted_classes: [::Symbol])
57
34
  end
58
35
  end
59
36
  end
@@ -1,18 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gem::Security
4
-
5
4
  ##
6
5
  # No security policy: all package signature checks are disabled.
7
6
 
8
7
  NoSecurity = Policy.new(
9
8
  "No Security",
10
- :verify_data => false,
11
- :verify_signer => false,
12
- :verify_chain => false,
13
- :verify_root => false,
14
- :only_trusted => false,
15
- :only_signed => false
9
+ verify_data: false,
10
+ verify_signer: false,
11
+ verify_chain: false,
12
+ verify_root: false,
13
+ only_trusted: false,
14
+ only_signed: false
16
15
  )
17
16
 
18
17
  ##
@@ -25,12 +24,12 @@ module Gem::Security
25
24
 
26
25
  AlmostNoSecurity = Policy.new(
27
26
  "Almost No Security",
28
- :verify_data => true,
29
- :verify_signer => false,
30
- :verify_chain => false,
31
- :verify_root => false,
32
- :only_trusted => false,
33
- :only_signed => false
27
+ verify_data: true,
28
+ verify_signer: false,
29
+ verify_chain: false,
30
+ verify_root: false,
31
+ only_trusted: false,
32
+ only_signed: false
34
33
  )
35
34
 
36
35
  ##
@@ -42,12 +41,12 @@ module Gem::Security
42
41
 
43
42
  LowSecurity = Policy.new(
44
43
  "Low Security",
45
- :verify_data => true,
46
- :verify_signer => true,
47
- :verify_chain => false,
48
- :verify_root => false,
49
- :only_trusted => false,
50
- :only_signed => false
44
+ verify_data: true,
45
+ verify_signer: true,
46
+ verify_chain: false,
47
+ verify_root: false,
48
+ only_trusted: false,
49
+ only_signed: false
51
50
  )
52
51
 
53
52
  ##
@@ -61,12 +60,12 @@ module Gem::Security
61
60
 
62
61
  MediumSecurity = Policy.new(
63
62
  "Medium Security",
64
- :verify_data => true,
65
- :verify_signer => true,
66
- :verify_chain => true,
67
- :verify_root => true,
68
- :only_trusted => true,
69
- :only_signed => false
63
+ verify_data: true,
64
+ verify_signer: true,
65
+ verify_chain: true,
66
+ verify_root: true,
67
+ only_trusted: true,
68
+ only_signed: false
70
69
  )
71
70
 
72
71
  ##
@@ -80,12 +79,12 @@ module Gem::Security
80
79
 
81
80
  HighSecurity = Policy.new(
82
81
  "High Security",
83
- :verify_data => true,
84
- :verify_signer => true,
85
- :verify_chain => true,
86
- :verify_root => true,
87
- :only_trusted => true,
88
- :only_signed => true
82
+ verify_data: true,
83
+ verify_signer: true,
84
+ verify_chain: true,
85
+ verify_root: true,
86
+ only_trusted: true,
87
+ only_signed: true
89
88
  )
90
89
 
91
90
  ##
@@ -93,12 +92,12 @@ module Gem::Security
93
92
 
94
93
  SigningPolicy = Policy.new(
95
94
  "Signing Policy",
96
- :verify_data => false,
97
- :verify_signer => true,
98
- :verify_chain => true,
99
- :verify_root => true,
100
- :only_trusted => false,
101
- :only_signed => false
95
+ verify_data: false,
96
+ verify_signer: true,
97
+ verify_chain: true,
98
+ verify_root: true,
99
+ only_trusted: false,
100
+ only_signed: false
102
101
  )
103
102
 
104
103
  ##
@@ -112,5 +111,4 @@ module Gem::Security
112
111
  "HighSecurity" => HighSecurity,
113
112
  # SigningPolicy is not intended for use by `gem -P` so do not list it
114
113
  }.freeze
115
-
116
114
  end
@@ -135,7 +135,7 @@ class Gem::Security::Policy
135
135
  raise Gem::Security::Exception, "missing root certificate" unless root
136
136
 
137
137
  raise Gem::Security::Exception,
138
- "root certificate #{root.subject} is not self-signed " +
138
+ "root certificate #{root.subject} is not self-signed " \
139
139
  "(issuer #{root.issuer})" if
140
140
  root.issuer != root.subject
141
141
 
@@ -171,7 +171,7 @@ class Gem::Security::Policy
171
171
  cert_dgst = digester.digest pkey_str
172
172
 
173
173
  raise Gem::Security::Exception,
174
- "trusted root certificate #{root.subject} checksum " +
174
+ "trusted root certificate #{root.subject} checksum " \
175
175
  "does not match signing root certificate checksum" unless
176
176
  save_dgst == cert_dgst
177
177
 
@@ -192,11 +192,8 @@ class Gem::Security::Policy
192
192
  end
193
193
 
194
194
  def inspect # :nodoc:
195
- ("[Policy: %s - data: %p signer: %p chain: %p root: %p " +
196
- "signed-only: %p trusted-only: %p]") % [
197
- @name, @verify_chain, @verify_data, @verify_root, @verify_signer,
198
- @only_signed, @only_trusted
199
- ]
195
+ format("[Policy: %s - data: %p signer: %p chain: %p root: %p " \
196
+ "signed-only: %p trusted-only: %p]", @name, @verify_chain, @verify_data, @verify_root, @verify_signer, @only_signed, @only_trusted)
200
197
  end
201
198
 
202
199
  ##
@@ -206,8 +203,7 @@ class Gem::Security::Policy
206
203
  #
207
204
  # If +key+ is given it is used to validate the signing certificate.
208
205
 
209
- def verify(chain, key = nil, digests = {}, signatures = {},
210
- full_name = "(unknown)")
206
+ def verify(chain, key = nil, digests = {}, signatures = {}, full_name = "(unknown)")
211
207
  if signatures.empty?
212
208
  if @only_signed
213
209
  raise Gem::Security::Exception,
@@ -226,7 +222,7 @@ class Gem::Security::Policy
226
222
  trust_dir = opt[:trust_dir]
227
223
  time = Time.now
228
224
 
229
- _, signer_digests = digests.find do |algorithm, file_digests|
225
+ _, signer_digests = digests.find do |_algorithm, file_digests|
230
226
  file_digests.values.first.name == Gem::Security::DIGEST_NAME
231
227
  end
232
228
 
@@ -288,5 +284,5 @@ class Gem::Security::Policy
288
284
  true
289
285
  end
290
286
 
291
- alias to_s name # :nodoc:
287
+ alias_method :to_s, :name # :nodoc:
292
288
  end
@@ -106,7 +106,7 @@ class Gem::Security::Signer
106
106
  # this value is preferred, otherwise the subject is used.
107
107
 
108
108
  def extract_name(cert) # :nodoc:
109
- subject_alt_name = cert.extensions.find {|e| "subjectAltName" == e.oid }
109
+ subject_alt_name = cert.extensions.find {|e| e.oid == "subjectAltName" }
110
110
 
111
111
  if subject_alt_name
112
112
  /\Aemail:/ =~ subject_alt_name.value # rubocop:disable Performance/StartWith
@@ -9,8 +9,8 @@ class Gem::Security::TrustDir
9
9
  # Default permissions for the trust directory and its contents
10
10
 
11
11
  DEFAULT_PERMISSIONS = {
12
- :trust_dir => 0o700,
13
- :trusted_cert => 0o600,
12
+ trust_dir: 0o700,
13
+ trusted_cert: 0o600,
14
14
  }.freeze
15
15
 
16
16
  ##
@@ -111,7 +111,7 @@ class Gem::Security::TrustDir
111
111
 
112
112
  FileUtils.chmod 0o700, @dir
113
113
  else
114
- FileUtils.mkdir_p @dir, :mode => @permissions[:trust_dir]
114
+ FileUtils.mkdir_p @dir, mode: @permissions[:trust_dir]
115
115
  end
116
116
  end
117
117
  end
@@ -326,7 +326,6 @@ require_relative "openssl"
326
326
  # http://pablotron.org/
327
327
 
328
328
  module Gem::Security
329
-
330
329
  ##
331
330
  # Gem::Security default exception type
332
331
 
@@ -399,8 +398,7 @@ module Gem::Security
399
398
  #
400
399
  # The +extensions+ restrict the key to the indicated uses.
401
400
 
402
- def self.create_cert(subject, key, age = ONE_YEAR, extensions = EXTENSIONS,
403
- serial = 1)
401
+ def self.create_cert(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
404
402
  cert = OpenSSL::X509::Certificate.new
405
403
 
406
404
  cert.public_key = get_public_key(key)
@@ -451,8 +449,7 @@ module Gem::Security
451
449
  # Creates a self-signed certificate with an issuer and subject of +subject+
452
450
  # and the given +extensions+ for the +key+.
453
451
 
454
- def self.create_cert_self_signed(subject, key, age = ONE_YEAR,
455
- extensions = EXTENSIONS, serial = 1)
452
+ def self.create_cert_self_signed(subject, key, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
456
453
  certificate = create_cert subject, key, age, extensions
457
454
 
458
455
  sign certificate, key, certificate, age, extensions, serial
@@ -462,16 +459,8 @@ module Gem::Security
462
459
  # Creates a new digest instance using the specified +algorithm+. The default
463
460
  # is SHA256.
464
461
 
465
- if defined?(OpenSSL::Digest)
466
- def self.create_digest(algorithm = DIGEST_NAME)
467
- OpenSSL::Digest.new(algorithm)
468
- end
469
- else
470
- require "digest"
471
-
472
- def self.create_digest(algorithm = DIGEST_NAME)
473
- Digest.const_get(algorithm).new
474
- end
462
+ def self.create_digest(algorithm = DIGEST_NAME)
463
+ OpenSSL::Digest.new(algorithm)
475
464
  end
476
465
 
477
466
  ##
@@ -516,11 +505,10 @@ module Gem::Security
516
505
  #--
517
506
  # TODO increment serial
518
507
 
519
- def self.re_sign(expired_certificate, private_key, age = ONE_YEAR,
520
- extensions = EXTENSIONS)
508
+ def self.re_sign(expired_certificate, private_key, age = ONE_YEAR, extensions = EXTENSIONS)
521
509
  raise Gem::Security::Exception,
522
510
  "incorrect signing key for re-signing " +
523
- "#{expired_certificate.subject}" unless
511
+ expired_certificate.subject.to_s unless
524
512
  expired_certificate.check_private_key(private_key)
525
513
 
526
514
  unless expired_certificate.subject.to_s ==
@@ -529,7 +517,7 @@ module Gem::Security
529
517
  issuer = alt_name_or_x509_entry expired_certificate, :issuer
530
518
 
531
519
  raise Gem::Security::Exception,
532
- "#{subject} is not self-signed, contact #{issuer} " +
520
+ "#{subject} is not self-signed, contact #{issuer} " \
533
521
  "to obtain a valid certificate"
534
522
  end
535
523
 
@@ -553,8 +541,7 @@ module Gem::Security
553
541
  #
554
542
  # Returns the newly signed certificate.
555
543
 
556
- def self.sign(certificate, signing_key, signing_cert,
557
- age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
544
+ def self.sign(certificate, signing_key, signing_cert, age = ONE_YEAR, extensions = EXTENSIONS, serial = 1)
558
545
  signee_subject = certificate.subject
559
546
  signee_key = certificate.public_key
560
547
 
@@ -617,7 +604,6 @@ module Gem::Security
617
604
  end
618
605
 
619
606
  reset
620
-
621
607
  end
622
608
 
623
609
  if Gem::HAVE_OPENSSL
@@ -70,8 +70,6 @@ class Gem::Source::Git < Gem::Source
70
70
  -1
71
71
  when Gem::Source then
72
72
  1
73
- else
74
- nil
75
73
  end
76
74
  end
77
75
 
@@ -229,7 +227,7 @@ class Gem::Source::Git < Gem::Source
229
227
  require_relative "../openssl"
230
228
 
231
229
  normalized =
232
- if @repository =~ %r{^\w+://(\w+@)?}
230
+ if @repository.match?(%r{^\w+://(\w+@)?})
233
231
  uri = URI(@repository).normalize.to_s.sub %r{/$},""
234
232
  uri.sub(/\A(\w+)/) { $1.downcase }
235
233
  else
@@ -21,8 +21,6 @@ class Gem::Source::Installed < Gem::Source
21
21
  0
22
22
  when Gem::Source then
23
23
  1
24
- else
25
- nil
26
24
  end
27
25
  end
28
26
 
@@ -24,14 +24,12 @@ class Gem::Source::Local < Gem::Source
24
24
  0
25
25
  when Gem::Source then
26
26
  1
27
- else
28
- nil
29
27
  end
30
28
  end
31
29
 
32
30
  def inspect # :nodoc:
33
31
  keys = @specs ? @specs.keys.sort : "NOT LOADED"
34
- "#<%s specs: %p>" % [self.class, keys]
32
+ format("#<%s specs: %p>", self.class, keys)
35
33
  end
36
34
 
37
35
  def load_specs(type) # :nodoc:
@@ -44,7 +42,7 @@ class Gem::Source::Local < Gem::Source
44
42
  pkg = Gem::Package.new(file)
45
43
  spec = pkg.spec
46
44
  rescue SystemCallError, Gem::Package::FormatError
47
- # ignore
45
+ # ignore
48
46
  else
49
47
  tup = spec.name_tuple
50
48
  @specs[tup] = [File.expand_path(file), pkg]
@@ -77,8 +75,7 @@ class Gem::Source::Local < Gem::Source
77
75
  end
78
76
  end
79
77
 
80
- def find_gem(gem_name, version = Gem::Requirement.default, # :nodoc:
81
- prerelease = false)
78
+ def find_gem(gem_name, version = Gem::Requirement.default, prerelease = false) # :nodoc:
82
79
  load_specs :complete
83
80
 
84
81
  found = []
@@ -96,7 +93,7 @@ class Gem::Source::Local < Gem::Source
96
93
  end
97
94
  end
98
95
 
99
- found.max_by {|s| s.version }
96
+ found.max_by(&:version)
100
97
  end
101
98
 
102
99
  def fetch_spec(name) # :nodoc:
@@ -112,7 +109,7 @@ class Gem::Source::Local < Gem::Source
112
109
  def download(spec, cache_dir = nil) # :nodoc:
113
110
  load_specs :complete
114
111
 
115
- @specs.each do |name, data|
112
+ @specs.each do |_name, data|
116
113
  return data[0] if data[1].spec == spec
117
114
  end
118
115
 
@@ -25,13 +25,11 @@ class Gem::Source::Lock < Gem::Source
25
25
  @wrapped <=> other.wrapped
26
26
  when Gem::Source then
27
27
  1
28
- else
29
- nil
30
28
  end
31
29
  end
32
30
 
33
31
  def ==(other) # :nodoc:
34
- 0 == (self <=> other)
32
+ (self <=> other) == 0
35
33
  end
36
34
 
37
35
  def hash # :nodoc:
@@ -34,7 +34,6 @@ class Gem::Source::SpecificFile < Gem::Source
34
34
  def fetch_spec(name) # :nodoc:
35
35
  return @spec if name == @name
36
36
  raise Gem::Exception, "Unable to find '#{name}'"
37
- @spec
38
37
  end
39
38
 
40
39
  def download(spec, dir = nil) # :nodoc:
@@ -19,8 +19,6 @@ class Gem::Source::Vendor < Gem::Source::Installed
19
19
  0
20
20
  when Gem::Source then
21
21
  1
22
- else
23
- nil
24
22
  end
25
23
  end
26
24
  end
@@ -12,9 +12,9 @@ class Gem::Source
12
12
  include Gem::Text
13
13
 
14
14
  FILES = { # :nodoc:
15
- :released => "specs",
16
- :latest => "latest_specs",
17
- :prerelease => "prerelease_specs",
15
+ released: "specs",
16
+ latest: "latest_specs",
17
+ prerelease: "prerelease_specs",
18
18
  }.freeze
19
19
 
20
20
  ##
@@ -56,8 +56,6 @@ class Gem::Source
56
56
  return 1 unless @uri.to_s == other.uri.to_s
57
57
 
58
58
  0
59
- else
60
- nil
61
59
  end
62
60
  end
63
61
 
@@ -71,7 +69,7 @@ class Gem::Source
71
69
  # Returns a Set that can fetch specifications from this source.
72
70
 
73
71
  def dependency_resolver_set # :nodoc:
74
- return Gem::Resolver::IndexSet.new self if "file" == uri.scheme
72
+ return Gem::Resolver::IndexSet.new self if uri.scheme == "file"
75
73
 
76
74
  fetch_uri = if uri.host == "rubygems.org"
77
75
  index_uri = uri.dup
@@ -102,8 +100,7 @@ class Gem::Source
102
100
 
103
101
  def cache_dir(uri)
104
102
  # Correct for windows paths
105
- escaped_path = uri.path.sub(/^\/([a-z]):\//i, '/\\1-/')
106
- escaped_path.tap(&Gem::UNTAINT)
103
+ escaped_path = uri.path.sub(%r{^/([a-z]):/}i, '/\\1-/')
107
104
 
108
105
  File.join Gem.spec_cache_dir, "#{uri.host}%#{uri.port}", File.dirname(escaped_path)
109
106
  end
@@ -137,8 +134,9 @@ class Gem::Source
137
134
 
138
135
  if File.exist? local_spec
139
136
  spec = Gem.read_binary local_spec
137
+ Gem.load_safe_marshal
140
138
  spec = begin
141
- Marshal.load(spec)
139
+ Gem::SafeMarshal.safe_load(spec)
142
140
  rescue StandardError
143
141
  nil
144
142
  end
@@ -159,8 +157,9 @@ class Gem::Source
159
157
  end
160
158
  end
161
159
 
160
+ Gem.load_safe_marshal
162
161
  # TODO: Investigate setting Gem::Specification#loaded_from to a URI
163
- Marshal.load spec
162
+ Gem::SafeMarshal.safe_load spec
164
163
  end
165
164
 
166
165
  ##
@@ -190,8 +189,9 @@ class Gem::Source
190
189
 
191
190
  spec_dump = fetcher.cache_update_path spec_path, local_file, update_cache?
192
191
 
192
+ Gem.load_safe_marshal
193
193
  begin
194
- Gem::NameTuple.from_list Marshal.load(spec_dump)
194
+ Gem::NameTuple.from_list Gem::SafeMarshal.safe_load(spec_dump)
195
195
  rescue ArgumentError
196
196
  if update_cache? && !retried
197
197
  FileUtils.rm local_file
@@ -233,7 +233,7 @@ class Gem::Source
233
233
  private
234
234
 
235
235
  def enforce_trailing_slash(uri)
236
- uri.merge(uri.path.gsub(/\/+$/, "") + "/")
236
+ uri.merge(uri.path.gsub(%r{/+$}, "") + "/")
237
237
  end
238
238
  end
239
239