Method: Rex::OLE::Storage#read_data_mini

Defined in:
lib/rex/ole/storage.rb

#read_data_mini(direntry) ⇒ Object



322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
# File 'lib/rex/ole/storage.rb', line 322

def read_data_mini(direntry)
  ret = ""
  visited = []
  left = direntry.length
  sect = direntry.start_sector
  while (sect != SECT_END)
    if (visited.include?(sect))
      raise RuntimeError, 'Sector chain loop detected (0x%08x mini)' % sect
    end
    visited << sect

    # how much to read?
    block = @header.mini_sector_size
    block = left if (block > left)

    # read it.
    dlog("read_data_mini - reading 0x%x bytes" % block, 'rex', LEV_3)
    buf = read_mini_sector(sect, block)
    ret << buf
    left -= buf.length

    # done?
    break if (left == 0)

    sect = next_mini_sector(sect)
  end
  ret
end