diff options
author | David RodrÃguez <deivid.rodriguez@riseup.net> | 2021-12-13 16:53:50 +0100 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2021-12-15 19:46:44 +0900 |
commit | 9f87c0cc6dff70e8a1c4d204d1d45920d26f2e3a (patch) | |
tree | 137f13cb562f16c14374ceff86ad32dd2d7b13ea | |
parent | c2dbdf3067c334e22946fbda74181d3a94afbf97 (diff) |
[rubygems/rubygems] Pass `:bimode` explicitly to `File.open`
The `File::BINARY` flag is apparently ignored due to a ruby bug, and
thus writing can cause encoding issues.
https://github.com/rubygems/rubygems/commit/db4efbebf2
-rw-r--r-- | lib/rubygems.rb | 2 | ||||
-rw-r--r-- | test/rubygems/test_gem_remote_fetcher.rb | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/rubygems.rb b/lib/rubygems.rb index b7dda38d52..40f3a893d8 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -800,7 +800,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]} ## # Safely write a file in binary mode on all platforms. def self.write_binary(path, data) - File.open(path, File::RDWR | File::CREAT | File::BINARY | File::LOCK_EX) do |io| + File.open(path, File::RDWR | File::CREAT | File::LOCK_EX, binmode: true) do |io| io.write data end rescue *WRITE_BINARY_ERRORS diff --git a/test/rubygems/test_gem_remote_fetcher.rb b/test/rubygems/test_gem_remote_fetcher.rb index 5ce420b91a..3ce9be7c90 100644 --- a/test/rubygems/test_gem_remote_fetcher.rb +++ b/test/rubygems/test_gem_remote_fetcher.rb @@ -173,6 +173,21 @@ PeIQQkFng2VVot/WAQbv3ePqWq07g1BBcwIBAg== assert_equal 'hello', File.read(path) end + def test_cache_update_path_with_utf8_internal_encoding + with_internal_encoding('UTF-8') do + uri = URI 'http://example/file' + path = File.join @tempdir, 'file' + data = String.new("\xC8").force_encoding(Encoding::BINARY) + + fetcher = util_fuck_with_fetcher data + + written_data = fetcher.cache_update_path uri, path + + assert_equal data, written_data + assert_equal data, File.binread(path) + end + end + def test_cache_update_path_no_update uri = URI 'http://example/file' path = File.join @tempdir, 'file' |