Skip to content

Commit

Permalink
Switch newly created StringIOs to binmode.
Browse files Browse the repository at this point in the history
StringIO objects created within File.open_buffer were not being switched into
binmode, but those passed in were. Fix this inconsistency and add a test.
  • Loading branch information
hainesr committed Apr 4, 2018
1 parent 15ccc25 commit 84c2089
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 6 deletions.
10 changes: 4 additions & 6 deletions lib/zip/file.rb
Expand Up @@ -134,12 +134,10 @@ def open_buffer(io, options = {})
raise "Zip::File.open_buffer expects a String or IO-like argument (responds to #{IO_METHODS.join(', ')}). Found: #{io.class}"
end

if io.is_a?(::String)
io = ::StringIO.new(io)
elsif io.respond_to?(:binmode)
# https://github.com/rubyzip/rubyzip/issues/119
io.binmode
end
io = ::StringIO.new(io) if io.is_a?(::String)

# https://github.com/rubyzip/rubyzip/issues/119
io.binmode if io.respond_to?(:binmode)

zf = ::Zip::File.new(io, true, true, options)
return zf unless block_given?
Expand Down
7 changes: 7 additions & 0 deletions test/file_test.rb
Expand Up @@ -97,6 +97,13 @@ def test_get_output_stream
end
end

def test_open_buffer_with_string
string = File.read('test/data/rubycode.zip')
::Zip::File.open_buffer string do |zf|
assert zf.entries.map { |e| e.name }.include?('zippedruby1.rb')
end
end

def test_open_buffer_with_stringio
string_io = StringIO.new File.read('test/data/rubycode.zip')
::Zip::File.open_buffer string_io do |zf|
Expand Down

0 comments on commit 84c2089

Please sign in to comment.