summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2021-10-26 12:30:53 -0400
committerPeter LaFosse <peter@vector35.com>2021-11-05 10:30:12 -0400
commit2386158d10d402b7783ab6f1253f548d230896c8 (patch)
tree49466741f8e27a86c739438fbcc8d12209e3e702 /python
parent9290bd614d83b389ba0c1159379d3d357c658b1e (diff)
Properly calculate the width of NamedTypeReferences in TypedDataReader
Diffstat (limited to 'python')
-rw-r--r--python/binaryview.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/python/binaryview.py b/python/binaryview.py
index ba7748a2..c1bfde83 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -7984,22 +7984,26 @@ class TypedDataReader:
assert isinstance(self.type, _types.Type), "Attempting to create TypedDataReader with TypeBuilder"
def __bytes__(self):
- return self.view.read(self.address, len(self.type))
+ return self.view.read(self.address, len(self))
def __repr__(self):
return f"<TypedDataReader type:{self.type} value:{self.value}>"
def __len__(self):
- return len(self.type)
+ _type = self.type
+ if isinstance(_type, _types.NamedTypeReferenceType):
+ _type = _type.target(self.view)
+ assert _type is not None
+ return len(_type)
def __int__(self):
_type = self.type
if isinstance(_type, _types.NamedTypeReferenceType):
_type = _type.target(self.view)
if isinstance(_type, _types.PointerType):
- return self.int_from_bytes(bytes(self), _type.width, False, self.endian)
+ return self.int_from_bytes(bytes(self), len(self), False, self.endian)
elif isinstance(_type, (_types.IntegerType, _types.EnumerationType)):
- return self.int_from_bytes(bytes(self), _type.width, bool(_type.signed), self.endian)
+ return self.int_from_bytes(bytes(self), len(self), bool(_type.signed), self.endian)
raise Exception(f"Attempting to coerce non integral type: {type(_type)} to an integer")
def __getitem__(self, key:Union[str, int]) -> 'TypedDataReader':