Method: Rex::Zip::Archive#pack

Defined in:
lib/rex/zip/archive.rb

#packObject

Compress this archive and return the resulting zip file as a String.



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/rex/zip/archive.rb', line 89

def pack
  ret = ''

  # save the offests
  offsets = []

  # file 1 .. file n
  @entries.each { |ent|
    offsets << ret.length
    ret << ent.pack
  }

  # archive decryption header (unsupported)
  # archive extra data record (unsupported)

  # central directory
  cfd_offset = ret.length
  idx = 0
  @entries.each { |ent|
    cfd = CentralDir.new(ent, offsets[idx])
    ret << cfd.pack
    idx += 1
  }

  # zip64 end of central dir record (unsupported)
  # zip64 end of central dir locator (unsupported)

  # end of central directory record
  cur_offset = ret.length - cfd_offset
  ret << CentralDirEnd.new(@entries.length, cur_offset, cfd_offset, @comment).pack

  ret
end