HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/rubygems-integration/all/gems/rubyzip-2.3.0/lib/zip/crypto/decrypted_io.rb
module Zip
  class DecryptedIo #:nodoc:all
    CHUNK_SIZE = 32_768

    def initialize(io, decrypter)
      @io = io
      @decrypter = decrypter
    end

    def read(length = nil, outbuf = +'')
      return (length.nil? || length.zero? ? '' : nil) if eof

      while length.nil? || (buffer.bytesize < length)
        break if input_finished?

        buffer << produce_input
      end

      outbuf.replace(buffer.slice!(0...(length || output_buffer.bytesize)))
    end

    private

    def eof
      buffer.empty? && input_finished?
    end

    def buffer
      @buffer ||= +''
    end

    def input_finished?
      @io.eof
    end

    def produce_input
      @decrypter.decrypt(@io.read(CHUNK_SIZE))
    end
  end
end