rubygems-update 3.4.22 → 3.5.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 (540) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +105 -2
  3. data/Manifest.txt +46 -221
  4. data/README.md +1 -3
  5. data/bundler/CHANGELOG.md +63 -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 +254 -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 +46 -30
  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/.document +1 -0
  134. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +1 -1
  135. data/bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +53 -6
  136. data/bundler/lib/bundler/vendor/fileutils/.document +1 -0
  137. data/bundler/lib/bundler/vendor/fileutils/lib/fileutils.rb +8 -20
  138. data/bundler/lib/bundler/vendor/net-http-persistent/.document +1 -0
  139. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +3 -3
  140. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +2 -2
  141. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +1 -1
  142. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +34 -34
  143. data/bundler/lib/bundler/vendor/pub_grub/.document +1 -0
  144. data/bundler/lib/bundler/vendor/thor/.document +1 -0
  145. data/bundler/lib/bundler/vendor/tsort/.document +1 -0
  146. data/bundler/lib/bundler/vendor/tsort/lib/tsort.rb +3 -0
  147. data/bundler/lib/bundler/vendor/uri/.document +1 -0
  148. data/bundler/lib/bundler/vendor/uri/lib/uri/common.rb +256 -132
  149. data/bundler/lib/bundler/vendor/uri/lib/uri/generic.rb +1 -0
  150. data/bundler/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +95 -31
  151. data/bundler/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  152. data/bundler/lib/bundler/vendored_net_http.rb +8 -0
  153. data/bundler/lib/bundler/vendored_persistent.rb +0 -4
  154. data/bundler/lib/bundler/vendored_timeout.rb +8 -0
  155. data/bundler/lib/bundler/version.rb +1 -1
  156. data/bundler/lib/bundler/vlad.rb +1 -1
  157. data/bundler/lib/bundler/yaml_serializer.rb +3 -3
  158. data/bundler/lib/bundler.rb +41 -32
  159. data/lib/rubygems/available_set.rb +4 -4
  160. data/lib/rubygems/basic_specification.rb +35 -37
  161. data/lib/rubygems/bundler_version_finder.rb +4 -4
  162. data/lib/rubygems/ci_detector.rb +75 -0
  163. data/lib/rubygems/command.rb +13 -15
  164. data/lib/rubygems/command_manager.rb +5 -4
  165. data/lib/rubygems/commands/build_command.rb +2 -2
  166. data/lib/rubygems/commands/cert_command.rb +1 -2
  167. data/lib/rubygems/commands/check_command.rb +4 -4
  168. data/lib/rubygems/commands/cleanup_command.rb +12 -14
  169. data/lib/rubygems/commands/contents_command.rb +4 -4
  170. data/lib/rubygems/commands/dependency_command.rb +4 -5
  171. data/lib/rubygems/commands/environment_command.rb +1 -3
  172. data/lib/rubygems/commands/exec_command.rb +1 -1
  173. data/lib/rubygems/commands/fetch_command.rb +2 -2
  174. data/lib/rubygems/commands/generate_index_command.rb +39 -74
  175. data/lib/rubygems/commands/help_command.rb +3 -3
  176. data/lib/rubygems/commands/info_command.rb +2 -2
  177. data/lib/rubygems/commands/install_command.rb +8 -16
  178. data/lib/rubygems/commands/list_command.rb +2 -2
  179. data/lib/rubygems/commands/lock_command.rb +1 -1
  180. data/lib/rubygems/commands/open_command.rb +1 -1
  181. data/lib/rubygems/commands/owner_command.rb +1 -1
  182. data/lib/rubygems/commands/pristine_command.rb +13 -15
  183. data/lib/rubygems/commands/push_command.rb +2 -2
  184. data/lib/rubygems/commands/query_command.rb +4 -5
  185. data/lib/rubygems/commands/rdoc_command.rb +2 -2
  186. data/lib/rubygems/commands/search_command.rb +2 -2
  187. data/lib/rubygems/commands/setup_command.rb +31 -34
  188. data/lib/rubygems/commands/sources_command.rb +12 -12
  189. data/lib/rubygems/commands/specification_command.rb +10 -10
  190. data/lib/rubygems/commands/stale_command.rb +1 -1
  191. data/lib/rubygems/commands/uninstall_command.rb +9 -10
  192. data/lib/rubygems/commands/unpack_command.rb +4 -4
  193. data/lib/rubygems/commands/update_command.rb +10 -12
  194. data/lib/rubygems/commands/which_command.rb +1 -1
  195. data/lib/rubygems/commands/yank_command.rb +1 -1
  196. data/lib/rubygems/compatibility.rb +5 -6
  197. data/lib/rubygems/config_file.rb +4 -4
  198. data/lib/rubygems/core_ext/kernel_gem.rb +0 -2
  199. data/lib/rubygems/core_ext/kernel_require.rb +19 -48
  200. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  201. data/lib/rubygems/core_ext/tcpsocket_init.rb +1 -1
  202. data/lib/rubygems/defaults.rb +15 -3
  203. data/lib/rubygems/dependency.rb +12 -14
  204. data/lib/rubygems/dependency_installer.rb +29 -30
  205. data/lib/rubygems/dependency_list.rb +1 -1
  206. data/lib/rubygems/deprecate.rb +16 -15
  207. data/lib/rubygems/doctor.rb +5 -5
  208. data/lib/rubygems/errors.rb +2 -6
  209. data/lib/rubygems/exceptions.rb +2 -1
  210. data/lib/rubygems/ext/builder.rb +15 -10
  211. data/lib/rubygems/ext/cargo_builder.rb +5 -5
  212. data/lib/rubygems/ext/ext_conf_builder.rb +1 -3
  213. data/lib/rubygems/gem_runner.rb +4 -4
  214. data/lib/rubygems/gemcutter_utilities/webauthn_listener/response.rb +3 -3
  215. data/lib/rubygems/gemcutter_utilities/webauthn_poller.rb +3 -3
  216. data/lib/rubygems/gemcutter_utilities.rb +18 -19
  217. data/lib/rubygems/install_update_options.rb +18 -19
  218. data/lib/rubygems/installer.rb +59 -33
  219. data/lib/rubygems/installer_uninstaller_utils.rb +0 -2
  220. data/lib/rubygems/local_remote_options.rb +7 -10
  221. data/lib/rubygems/name_tuple.rb +7 -9
  222. data/lib/rubygems/net/http.rb +3 -0
  223. data/lib/rubygems/net-http/.document +1 -0
  224. data/lib/rubygems/net-http/LICENSE.txt +22 -0
  225. data/lib/rubygems/net-http/lib/net/http/backward.rb +40 -0
  226. data/lib/rubygems/net-http/lib/net/http/exceptions.rb +34 -0
  227. data/lib/rubygems/net-http/lib/net/http/generic_request.rb +414 -0
  228. data/lib/rubygems/net-http/lib/net/http/header.rb +981 -0
  229. data/lib/rubygems/net-http/lib/net/http/proxy_delta.rb +17 -0
  230. data/lib/rubygems/net-http/lib/net/http/request.rb +88 -0
  231. data/lib/rubygems/net-http/lib/net/http/requests.rb +425 -0
  232. data/lib/rubygems/net-http/lib/net/http/response.rb +738 -0
  233. data/lib/rubygems/net-http/lib/net/http/responses.rb +1174 -0
  234. data/lib/rubygems/net-http/lib/net/http/status.rb +84 -0
  235. data/lib/rubygems/net-http/lib/net/http.rb +2496 -0
  236. data/lib/rubygems/net-http/lib/net/https.rb +23 -0
  237. data/lib/rubygems/net-protocol/.document +1 -0
  238. data/lib/rubygems/net-protocol/LICENSE.txt +22 -0
  239. data/lib/rubygems/net-protocol/lib/net/protocol.rb +544 -0
  240. data/lib/rubygems/optparse/lib/optparse.rb +39 -17
  241. data/lib/rubygems/package/old.rb +2 -2
  242. data/lib/rubygems/package/tar_header.rb +45 -39
  243. data/lib/rubygems/package/tar_reader/entry.rb +5 -4
  244. data/lib/rubygems/package/tar_reader.rb +5 -3
  245. data/lib/rubygems/package/tar_writer.rb +19 -17
  246. data/lib/rubygems/package.rb +27 -26
  247. data/lib/rubygems/package_task.rb +2 -2
  248. data/lib/rubygems/path_support.rb +9 -10
  249. data/lib/rubygems/platform.rb +60 -45
  250. data/lib/rubygems/query_utils.rb +7 -9
  251. data/lib/rubygems/remote_fetcher.rb +15 -15
  252. data/lib/rubygems/request/connection_pools.rb +3 -3
  253. data/lib/rubygems/request.rb +20 -17
  254. data/lib/rubygems/request_set/gem_dependency_api.rb +119 -122
  255. data/lib/rubygems/request_set/lockfile/parser.rb +9 -9
  256. data/lib/rubygems/request_set/lockfile/tokenizer.rb +20 -12
  257. data/lib/rubygems/request_set/lockfile.rb +6 -11
  258. data/lib/rubygems/request_set.rb +5 -5
  259. data/lib/rubygems/requirement.rb +7 -7
  260. data/lib/rubygems/resolv/.document +1 -0
  261. data/lib/rubygems/resolv/LICENSE.txt +22 -0
  262. data/lib/rubygems/resolv/lib/resolv.rb +3387 -0
  263. data/lib/rubygems/resolver/activation_request.rb +1 -3
  264. data/lib/rubygems/resolver/api_set/gem_parser.rb +7 -3
  265. data/lib/rubygems/resolver/best_set.rb +1 -1
  266. data/lib/rubygems/resolver/composed_set.rb +1 -1
  267. data/lib/rubygems/resolver/conflict.rb +4 -12
  268. data/lib/rubygems/resolver/index_set.rb +4 -4
  269. data/lib/rubygems/resolver/index_specification.rb +2 -2
  270. data/lib/rubygems/resolver/installer_set.rb +5 -6
  271. data/lib/rubygems/resolver/lock_set.rb +1 -1
  272. data/lib/rubygems/resolver/molinillo/.document +1 -0
  273. data/lib/rubygems/resolver.rb +3 -10
  274. data/lib/rubygems/s3_uri_signer.rb +6 -6
  275. data/lib/rubygems/safe_marshal/elements.rb +138 -0
  276. data/lib/rubygems/safe_marshal/reader.rb +306 -0
  277. data/lib/rubygems/safe_marshal/visitors/stream_printer.rb +31 -0
  278. data/lib/rubygems/safe_marshal/visitors/to_ruby.rb +385 -0
  279. data/lib/rubygems/safe_marshal/visitors/visitor.rb +74 -0
  280. data/lib/rubygems/safe_marshal.rb +74 -0
  281. data/lib/rubygems/safe_yaml.rb +5 -28
  282. data/lib/rubygems/security/policies.rb +36 -38
  283. data/lib/rubygems/security/policy.rb +7 -11
  284. data/lib/rubygems/security/signer.rb +1 -1
  285. data/lib/rubygems/security/trust_dir.rb +3 -3
  286. data/lib/rubygems/security.rb +8 -22
  287. data/lib/rubygems/source/git.rb +1 -3
  288. data/lib/rubygems/source/installed.rb +0 -2
  289. data/lib/rubygems/source/local.rb +5 -8
  290. data/lib/rubygems/source/lock.rb +1 -3
  291. data/lib/rubygems/source/specific_file.rb +0 -1
  292. data/lib/rubygems/source/vendor.rb +0 -2
  293. data/lib/rubygems/source.rb +12 -12
  294. data/lib/rubygems/source_list.rb +4 -4
  295. data/lib/rubygems/spec_fetcher.rb +29 -29
  296. data/lib/rubygems/specification.rb +125 -138
  297. data/lib/rubygems/specification_policy.rb +55 -25
  298. data/lib/rubygems/stub_specification.rb +4 -5
  299. data/lib/rubygems/text.rb +1 -2
  300. data/lib/rubygems/timeout/.document +1 -0
  301. data/lib/rubygems/timeout/LICENSE.txt +22 -0
  302. data/lib/rubygems/timeout/lib/timeout.rb +199 -0
  303. data/lib/rubygems/timeout.rb +3 -0
  304. data/lib/rubygems/tsort/lib/tsort.rb +3 -0
  305. data/lib/rubygems/uninstaller.rb +7 -9
  306. data/lib/rubygems/update_suggestion.rb +5 -18
  307. data/lib/rubygems/uri_formatter.rb +1 -1
  308. data/lib/rubygems/user_interaction.rb +15 -21
  309. data/lib/rubygems/util/licenses.rb +65 -35
  310. data/lib/rubygems/util/list.rb +3 -1
  311. data/lib/rubygems/util.rb +2 -4
  312. data/lib/rubygems/validator.rb +5 -3
  313. data/lib/rubygems/version.rb +34 -28
  314. data/lib/rubygems/version_option.rb +2 -5
  315. data/lib/rubygems/yaml_serializer.rb +3 -3
  316. data/lib/rubygems.rb +37 -37
  317. data/rubygems-update.gemspec +4 -4
  318. data/setup.rb +2 -2
  319. metadata +50 -225
  320. data/lib/rubygems/indexer.rb +0 -428
  321. data/lib/rubygems/mock_gem_ui.rb +0 -86
  322. data/test/rubygems/alternate_cert.pem +0 -19
  323. data/test/rubygems/alternate_cert_32.pem +0 -19
  324. data/test/rubygems/alternate_key.pem +0 -27
  325. data/test/rubygems/bad_rake.rb +0 -3
  326. data/test/rubygems/bundler_test_gem.rb +0 -424
  327. data/test/rubygems/ca_cert.pem +0 -77
  328. data/test/rubygems/child_cert.pem +0 -19
  329. data/test/rubygems/child_cert_32.pem +0 -19
  330. data/test/rubygems/child_key.pem +0 -27
  331. data/test/rubygems/client.pem +0 -107
  332. data/test/rubygems/data/excon-0.7.7.gemspec.rz +0 -0
  333. data/test/rubygems/data/gem-private_key.pem +0 -27
  334. data/test/rubygems/data/gem-public_cert.pem +0 -20
  335. data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
  336. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  337. data/test/rubygems/data/pry-0.4.7.gemspec.rz +0 -0
  338. data/test/rubygems/encrypted_private_key.pem +0 -30
  339. data/test/rubygems/expired_cert.pem +0 -19
  340. data/test/rubygems/fake_certlib/openssl.rb +0 -9
  341. data/test/rubygems/foo/discover.rb +0 -1
  342. data/test/rubygems/future_cert.pem +0 -19
  343. data/test/rubygems/future_cert_32.pem +0 -19
  344. data/test/rubygems/good_rake.rb +0 -3
  345. data/test/rubygems/grandchild_cert.pem +0 -19
  346. data/test/rubygems/grandchild_cert_32.pem +0 -19
  347. data/test/rubygems/grandchild_key.pem +0 -27
  348. data/test/rubygems/helper.rb +0 -1649
  349. data/test/rubygems/installer_test_case.rb +0 -248
  350. data/test/rubygems/invalid_client.pem +0 -49
  351. data/test/rubygems/invalid_issuer_cert.pem +0 -20
  352. data/test/rubygems/invalid_issuer_cert_32.pem +0 -20
  353. data/test/rubygems/invalid_key.pem +0 -27
  354. data/test/rubygems/invalid_signer_cert.pem +0 -19
  355. data/test/rubygems/invalid_signer_cert_32.pem +0 -19
  356. data/test/rubygems/invalidchild_cert.pem +0 -19
  357. data/test/rubygems/invalidchild_cert_32.pem +0 -19
  358. data/test/rubygems/invalidchild_key.pem +0 -27
  359. data/test/rubygems/multifactor_auth_utilities.rb +0 -111
  360. data/test/rubygems/package/tar_test_case.rb +0 -175
  361. data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
  362. data/test/rubygems/packages/ascii_binder-0.1.10.1.gem +0 -0
  363. data/test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem +0 -0
  364. data/test/rubygems/plugin/exception/rubygems_plugin.rb +0 -4
  365. data/test/rubygems/plugin/load/rubygems_plugin.rb +0 -5
  366. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +0 -4
  367. data/test/rubygems/private3072_key.pem +0 -40
  368. data/test/rubygems/private_ec_key.pem +0 -9
  369. data/test/rubygems/private_key.pem +0 -27
  370. data/test/rubygems/public3072_cert.pem +0 -25
  371. data/test/rubygems/public_cert.pem +0 -20
  372. data/test/rubygems/public_cert_32.pem +0 -19
  373. data/test/rubygems/public_key.pem +0 -9
  374. data/test/rubygems/rubygems/commands/crash_command.rb +0 -5
  375. data/test/rubygems/rubygems_plugin.rb +0 -24
  376. data/test/rubygems/sff/discover.rb +0 -1
  377. data/test/rubygems/simple_gem.rb +0 -68
  378. data/test/rubygems/specifications/bar-0.0.2.gemspec +0 -9
  379. data/test/rubygems/specifications/foo-0.0.1-x86-mswin32.gemspec +0 -0
  380. data/test/rubygems/specifications/rubyforge-0.0.1.gemspec +0 -14
  381. data/test/rubygems/ssl_cert.pem +0 -80
  382. data/test/rubygems/ssl_key.pem +0 -27
  383. data/test/rubygems/test_bundled_ca.rb +0 -61
  384. data/test/rubygems/test_config.rb +0 -28
  385. data/test/rubygems/test_deprecate.rb +0 -158
  386. data/test/rubygems/test_exit.rb +0 -17
  387. data/test/rubygems/test_gem.rb +0 -1799
  388. data/test/rubygems/test_gem_available_set.rb +0 -130
  389. data/test/rubygems/test_gem_bundler_version_finder.rb +0 -127
  390. data/test/rubygems/test_gem_command.rb +0 -403
  391. data/test/rubygems/test_gem_command_manager.rb +0 -400
  392. data/test/rubygems/test_gem_commands_build_command.rb +0 -739
  393. data/test/rubygems/test_gem_commands_cert_command.rb +0 -866
  394. data/test/rubygems/test_gem_commands_check_command.rb +0 -68
  395. data/test/rubygems/test_gem_commands_cleanup_command.rb +0 -292
  396. data/test/rubygems/test_gem_commands_contents_command.rb +0 -271
  397. data/test/rubygems/test_gem_commands_dependency_command.rb +0 -228
  398. data/test/rubygems/test_gem_commands_environment_command.rb +0 -169
  399. data/test/rubygems/test_gem_commands_exec_command.rb +0 -857
  400. data/test/rubygems/test_gem_commands_fetch_command.rb +0 -258
  401. data/test/rubygems/test_gem_commands_generate_index_command.rb +0 -81
  402. data/test/rubygems/test_gem_commands_help_command.rb +0 -94
  403. data/test/rubygems/test_gem_commands_info_command.rb +0 -70
  404. data/test/rubygems/test_gem_commands_install_command.rb +0 -1573
  405. data/test/rubygems/test_gem_commands_list_command.rb +0 -33
  406. data/test/rubygems/test_gem_commands_lock_command.rb +0 -67
  407. data/test/rubygems/test_gem_commands_mirror.rb +0 -20
  408. data/test/rubygems/test_gem_commands_open_command.rb +0 -101
  409. data/test/rubygems/test_gem_commands_outdated_command.rb +0 -50
  410. data/test/rubygems/test_gem_commands_owner_command.rb +0 -503
  411. data/test/rubygems/test_gem_commands_pristine_command.rb +0 -708
  412. data/test/rubygems/test_gem_commands_push_command.rb +0 -603
  413. data/test/rubygems/test_gem_commands_query_command.rb +0 -858
  414. data/test/rubygems/test_gem_commands_search_command.rb +0 -16
  415. data/test/rubygems/test_gem_commands_server_command.rb +0 -20
  416. data/test/rubygems/test_gem_commands_setup_command.rb +0 -474
  417. data/test/rubygems/test_gem_commands_signin_command.rb +0 -259
  418. data/test/rubygems/test_gem_commands_signout_command.rb +0 -30
  419. data/test/rubygems/test_gem_commands_sources_command.rb +0 -534
  420. data/test/rubygems/test_gem_commands_specification_command.rb +0 -277
  421. data/test/rubygems/test_gem_commands_stale_command.rb +0 -43
  422. data/test/rubygems/test_gem_commands_uninstall_command.rb +0 -542
  423. data/test/rubygems/test_gem_commands_unpack_command.rb +0 -224
  424. data/test/rubygems/test_gem_commands_update_command.rb +0 -836
  425. data/test/rubygems/test_gem_commands_which_command.rb +0 -85
  426. data/test/rubygems/test_gem_commands_yank_command.rb +0 -299
  427. data/test/rubygems/test_gem_config_file.rb +0 -551
  428. data/test/rubygems/test_gem_dependency.rb +0 -398
  429. data/test/rubygems/test_gem_dependency_installer.rb +0 -1190
  430. data/test/rubygems/test_gem_dependency_list.rb +0 -265
  431. data/test/rubygems/test_gem_dependency_resolution_error.rb +0 -27
  432. data/test/rubygems/test_gem_doctor.rb +0 -195
  433. data/test/rubygems/test_gem_ext_builder.rb +0 -337
  434. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/.gitignore +0 -1
  435. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/custom_name.gemspec +0 -10
  436. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.lock +0 -249
  437. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/Cargo.toml +0 -10
  438. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/ext/custom_name_lib/src/lib.rs +0 -27
  439. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/lib/custom_name.rb +0 -3
  440. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/.gitignore +0 -1
  441. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +0 -249
  442. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +0 -10
  443. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/rust_ruby_example.gemspec +0 -10
  444. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/src/lib.rs +0 -51
  445. data/test/rubygems/test_gem_ext_cargo_builder.rb +0 -167
  446. data/test/rubygems/test_gem_ext_cargo_builder_link_flag_converter.rb +0 -34
  447. data/test/rubygems/test_gem_ext_cargo_builder_unit.rb +0 -60
  448. data/test/rubygems/test_gem_ext_cmake_builder.rb +0 -84
  449. data/test/rubygems/test_gem_ext_configure_builder.rb +0 -80
  450. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +0 -229
  451. data/test/rubygems/test_gem_ext_rake_builder.rb +0 -113
  452. data/test/rubygems/test_gem_gem_runner.rb +0 -119
  453. data/test/rubygems/test_gem_gemcutter_utilities.rb +0 -361
  454. data/test/rubygems/test_gem_impossible_dependencies_error.rb +0 -60
  455. data/test/rubygems/test_gem_indexer.rb +0 -381
  456. data/test/rubygems/test_gem_install_update_options.rb +0 -208
  457. data/test/rubygems/test_gem_installer.rb +0 -2512
  458. data/test/rubygems/test_gem_local_remote_options.rb +0 -133
  459. data/test/rubygems/test_gem_name_tuple.rb +0 -43
  460. data/test/rubygems/test_gem_package.rb +0 -1306
  461. data/test/rubygems/test_gem_package_old.rb +0 -91
  462. data/test/rubygems/test_gem_package_tar_header.rb +0 -226
  463. data/test/rubygems/test_gem_package_tar_reader.rb +0 -150
  464. data/test/rubygems/test_gem_package_tar_reader_entry.rb +0 -350
  465. data/test/rubygems/test_gem_package_tar_writer.rb +0 -331
  466. data/test/rubygems/test_gem_package_task.rb +0 -118
  467. data/test/rubygems/test_gem_path_support.rb +0 -139
  468. data/test/rubygems/test_gem_platform.rb +0 -497
  469. data/test/rubygems/test_gem_rdoc.rb +0 -137
  470. data/test/rubygems/test_gem_remote_fetcher.rb +0 -1227
  471. data/test/rubygems/test_gem_request.rb +0 -547
  472. data/test/rubygems/test_gem_request_connection_pools.rb +0 -152
  473. data/test/rubygems/test_gem_request_set.rb +0 -672
  474. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +0 -853
  475. data/test/rubygems/test_gem_request_set_lockfile.rb +0 -469
  476. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +0 -544
  477. data/test/rubygems/test_gem_request_set_lockfile_tokenizer.rb +0 -307
  478. data/test/rubygems/test_gem_requirement.rb +0 -505
  479. data/test/rubygems/test_gem_resolver.rb +0 -859
  480. data/test/rubygems/test_gem_resolver_activation_request.rb +0 -43
  481. data/test/rubygems/test_gem_resolver_api_set.rb +0 -210
  482. data/test/rubygems/test_gem_resolver_api_specification.rb +0 -167
  483. data/test/rubygems/test_gem_resolver_best_set.rb +0 -159
  484. data/test/rubygems/test_gem_resolver_composed_set.rb +0 -44
  485. data/test/rubygems/test_gem_resolver_conflict.rb +0 -82
  486. data/test/rubygems/test_gem_resolver_dependency_request.rb +0 -83
  487. data/test/rubygems/test_gem_resolver_git_set.rb +0 -188
  488. data/test/rubygems/test_gem_resolver_git_specification.rb +0 -114
  489. data/test/rubygems/test_gem_resolver_index_set.rb +0 -88
  490. data/test/rubygems/test_gem_resolver_index_specification.rb +0 -93
  491. data/test/rubygems/test_gem_resolver_installed_specification.rb +0 -47
  492. data/test/rubygems/test_gem_resolver_installer_set.rb +0 -320
  493. data/test/rubygems/test_gem_resolver_local_specification.rb +0 -44
  494. data/test/rubygems/test_gem_resolver_lock_set.rb +0 -62
  495. data/test/rubygems/test_gem_resolver_lock_specification.rb +0 -98
  496. data/test/rubygems/test_gem_resolver_requirement_list.rb +0 -19
  497. data/test/rubygems/test_gem_resolver_specification.rb +0 -63
  498. data/test/rubygems/test_gem_resolver_vendor_set.rb +0 -82
  499. data/test/rubygems/test_gem_resolver_vendor_specification.rb +0 -82
  500. data/test/rubygems/test_gem_security.rb +0 -341
  501. data/test/rubygems/test_gem_security_policy.rb +0 -535
  502. data/test/rubygems/test_gem_security_signer.rb +0 -218
  503. data/test/rubygems/test_gem_security_trust_dir.rb +0 -99
  504. data/test/rubygems/test_gem_silent_ui.rb +0 -123
  505. data/test/rubygems/test_gem_source.rb +0 -254
  506. data/test/rubygems/test_gem_source_fetch_problem.rb +0 -37
  507. data/test/rubygems/test_gem_source_git.rb +0 -310
  508. data/test/rubygems/test_gem_source_installed.rb +0 -35
  509. data/test/rubygems/test_gem_source_list.rb +0 -119
  510. data/test/rubygems/test_gem_source_local.rb +0 -107
  511. data/test/rubygems/test_gem_source_lock.rb +0 -113
  512. data/test/rubygems/test_gem_source_specific_file.rb +0 -76
  513. data/test/rubygems/test_gem_source_subpath_problem.rb +0 -50
  514. data/test/rubygems/test_gem_source_vendor.rb +0 -30
  515. data/test/rubygems/test_gem_spec_fetcher.rb +0 -338
  516. data/test/rubygems/test_gem_specification.rb +0 -3856
  517. data/test/rubygems/test_gem_stream_ui.rb +0 -255
  518. data/test/rubygems/test_gem_stub_specification.rb +0 -278
  519. data/test/rubygems/test_gem_text.rb +0 -103
  520. data/test/rubygems/test_gem_uninstaller.rb +0 -675
  521. data/test/rubygems/test_gem_unsatisfiable_dependency_error.rb +0 -31
  522. data/test/rubygems/test_gem_update_suggestion.rb +0 -209
  523. data/test/rubygems/test_gem_uri.rb +0 -41
  524. data/test/rubygems/test_gem_uri_formatter.rb +0 -27
  525. data/test/rubygems/test_gem_util.rb +0 -91
  526. data/test/rubygems/test_gem_validator.rb +0 -42
  527. data/test/rubygems/test_gem_version.rb +0 -305
  528. data/test/rubygems/test_gem_version_option.rb +0 -165
  529. data/test/rubygems/test_kernel.rb +0 -124
  530. data/test/rubygems/test_project_sanity.rb +0 -49
  531. data/test/rubygems/test_remote_fetch_error.rb +0 -20
  532. data/test/rubygems/test_require.rb +0 -732
  533. data/test/rubygems/test_rubygems.rb +0 -76
  534. data/test/rubygems/test_webauthn_listener.rb +0 -143
  535. data/test/rubygems/test_webauthn_listener_response.rb +0 -93
  536. data/test/rubygems/test_webauthn_poller.rb +0 -124
  537. data/test/rubygems/utilities.rb +0 -436
  538. data/test/rubygems/wrong_key_cert.pem +0 -19
  539. data/test/rubygems/wrong_key_cert_32.pem +0 -19
  540. 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