diff --git a/lib/zip/output_stream.rb b/lib/zip/output_stream.rb index 2f628931..266083cd 100644 --- a/lib/zip/output_stream.rb +++ b/lib/zip/output_stream.rb @@ -58,6 +58,7 @@ def open(file_name, encrypter = nil) # Same as #open but writes to a filestream instead def write_buffer(io = ::StringIO.new(''), encrypter = nil) + io.binmode if io.respond_to?(:binmode) zos = new(io, true, encrypter) yield zos zos.close_buffer diff --git a/test/output_stream_test.rb b/test/output_stream_test.rb index 40205076..61c9ac37 100644 --- a/test/output_stream_test.rb +++ b/test/output_stream_test.rb @@ -6,6 +6,8 @@ class ZipOutputStreamTest < MiniTest::Test TEST_ZIP = TestZipFile::TEST_ZIP2.clone TEST_ZIP.zip_name = 'test/data/generated/output.zip' + ASCII8BIT = 'ASCII-8BIT' + def test_new zos = ::Zip::OutputStream.new(TEST_ZIP.zip_name) zos.comment = TEST_ZIP.comment @@ -32,6 +34,15 @@ def test_write_buffer assert_test_zip_contents(TEST_ZIP) end + def test_write_buffer_binmode + io = ::StringIO.new('') + buffer = ::Zip::OutputStream.write_buffer(io) do |zos| + zos.comment = TEST_ZIP.comment + write_test_zip(zos) + end + assert_equal Encoding::ASCII_8BIT, buffer.external_encoding + end + def test_write_buffer_with_temp_file tmp_file = Tempfile.new('')