Skip to content

IndexError in read_compressed_int (utils.py) #87

@gdesmar

Description

@gdesmar

I was wondering if you'd be interested by this error, caused by this file.
I found it using CAPA, with dnfile 0.14.1, but it also triggers on 0.15.0.

>>> import dnfile
>>> pe = dnfile.dnPE("e94f7c475e7db0691a2698b5dd349c2b412ffddafa7a3ff85785cbd5ac144fcb")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../dnfile/__init__.py", line 64, in __init__
    super().__init__(name, data, fast_load)
  File ".../pefile.py", line 2895, in __init__
    self.__parse__(name, data, fast_load)
  File ".../dnfile/__init__.py", line 132, in __parse__
    super().__parse__(fname, data, fast_load)
  File ".../pefile.py", line 3328, in __parse__
    self.full_load()
  File ".../pefile.py", line 3439, in full_load
    self.parse_data_directories()
  File ".../dnfile/__init__.py", line 178, in parse_data_directories
    value = entry[1](dir_entry.VirtualAddress, dir_entry.Size)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../dnfile/__init__.py", line 221, in parse_clr_structure
    return ClrData(self, rva, size, self.clr_lazy_load)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../dnfile/__init__.py", line 526, in __init__
    self._init_resources(pe)
  File ".../dnfile/__init__.py", line 574, in _init_resources
    rsrc.parse()
  File ".../dnfile/resource.py", line 289, in parse
    rs.parse()
  File ".../dnfile/resource.py", line 433, in parse
    rsrc_factory.read_rsrc_data_v1(self._data, e_data_offset, self.resource_types, e)
  File ".../dnfile/resource.py", line 113, in read_rsrc_data_v1
    d, v = self.type_str_to_type(entry.type_name, data, offset)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../dnfile/resource.py", line 166, in type_str_to_type
    final_bytes, n = self.read_serialized_data(data, offset)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../dnfile/resource.py", line 72, in read_serialized_data
    x = utils.read_compressed_int(data[offset:offset + 4])
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File ".../dnfile/utils.py", line 46, in read_compressed_int
    value |= data[1]
             ~~~~^^^
IndexError: index out of range

The file doesn't look to be too badly corrupted, but I may be wrong. 🙂

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions