diff --git a/rb/Gemfile.lock b/rb/Gemfile.lock index f1f36fa904086..79530a61814e5 100644 --- a/rb/Gemfile.lock +++ b/rb/Gemfile.lock @@ -7,7 +7,7 @@ PATH base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) - rubyzip (>= 1.2.2, < 3.0) + rubyzip (>= 1.2.2, < 4.0) websocket (~> 1.0) GEM @@ -147,7 +147,7 @@ GEM lint_roller (~> 1.1) rubocop (~> 1.72, >= 1.72.1) ruby-progressbar (1.13.0) - rubyzip (2.4.1) + rubyzip (3.0.0) securerandom (0.4.1) steep (1.5.3) activesupport (>= 5.1) diff --git a/rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb b/rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb index 0613862db6578..47179a8224a51 100644 --- a/rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb +++ b/rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb @@ -39,7 +39,13 @@ def download_file(file_name, target_directory) begin Zip::File.open("#{file_name}.zip") do |zip| - zip.each { |entry| zip.extract(entry, "#{target_directory}#{file_name}") } + zip.each do |entry| + if Zipper::RUBYZIP_V3 + zip.extract(entry, file_name, destination_directory: target_directory) + else + zip.extract(entry, "#{target_directory}#{file_name}") + end + end end ensure FileUtils.rm_f("#{file_name}.zip") diff --git a/rb/lib/selenium/webdriver/common/zipper.rb b/rb/lib/selenium/webdriver/common/zipper.rb index d464df500ad9d..2197068effcf0 100644 --- a/rb/lib/selenium/webdriver/common/zipper.rb +++ b/rb/lib/selenium/webdriver/common/zipper.rb @@ -18,6 +18,7 @@ # under the License. require 'zip' +require 'zip/version' # Not required automatically require 'tempfile' require 'find' require 'base64' @@ -30,6 +31,7 @@ module WebDriver module Zipper EXTENSIONS = %w[.zip .xpi].freeze + RUBYZIP_V3 = Zip::VERSION >= '3.0.0' class << self def unzip(path) @@ -42,7 +44,11 @@ def unzip(path) dirname = File.dirname(to) FileUtils.mkdir_p dirname - zip.extract(entry, to) + if RUBYZIP_V3 + zip.extract(entry, entry.name, destination_directory: destination) + else + zip.extract(entry, to) + end end end @@ -75,7 +81,11 @@ def with_tmp_zip(&blk) # Don't use Tempfile since it lacks rb_file_s_rename permission on Windows. Dir.mktmpdir do |tmp_dir| zip_path = File.join(tmp_dir, 'webdriver-zip') - Zip::File.open(zip_path, Zip::File::CREATE, &blk) + if RUBYZIP_V3 + Zip::File.open(zip_path, create: true, &blk) + else + Zip::File.open(zip_path, Zip::File::CREATE, &blk) + end end end diff --git a/rb/selenium-webdriver.gemspec b/rb/selenium-webdriver.gemspec index 41a94abec14a3..15783435bb73c 100644 --- a/rb/selenium-webdriver.gemspec +++ b/rb/selenium-webdriver.gemspec @@ -52,7 +52,7 @@ Gem::Specification.new do |s| s.add_dependency 'base64', ['~> 0.2'] s.add_dependency 'logger', ['~> 1.4'] s.add_dependency 'rexml', ['~> 3.2', '>= 3.2.5'] - s.add_dependency 'rubyzip', ['>= 1.2.2', '< 3.0'] + s.add_dependency 'rubyzip', ['>= 1.2.2', '< 4.0'] s.add_dependency 'websocket', ['~> 1.0'] s.add_development_dependency 'git', ['~> 1.19']