summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
Diffstat (limited to 'python')
-rw-r--r--python/binaryview.py4
-rw-r--r--python/metadata.py11
2 files changed, 11 insertions, 4 deletions
diff --git a/python/binaryview.py b/python/binaryview.py
index cefe6481..ec1f7a68 100644
--- a/python/binaryview.py
+++ b/python/binaryview.py
@@ -3823,7 +3823,9 @@ class BinaryView(object):
>>> bv.query_metadata("string")
'my_data'
"""
- core.BNBinaryViewStoreMetadata(self.handle, key, metadata.Metadata(md).handle)
+ if not isinstance(md, metadata.Metadata):
+ md = metadata.Metadata(md)
+ core.BNBinaryViewStoreMetadata(self.handle, key, md.handle)
def remove_metadata(self, key):
"""
diff --git a/python/metadata.py b/python/metadata.py
index 606e4ceb..546a473c 100644
--- a/python/metadata.py
+++ b/python/metadata.py
@@ -42,9 +42,11 @@ class Metadata(object):
self.handle = core.BNCreateMetadataUnsignedIntegerData(value)
elif isinstance(value, bool):
self.handle = core.BNCreateMetadataBooleanData(value)
- elif isinstance(value, str):
+ elif isinstance(value, (str, bytes)):
if raw:
- buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(value.encode('charmap'))
+ if isinstance(value, str):
+ value = bytes(bytearray(ord(i) for i in value))
+ buffer = (ctypes.c_ubyte * len(value)).from_buffer_copy(value)
self.handle = core.BNCreateMetadataRawData(buffer, len(value))
else:
self.handle = core.BNCreateMetadataStringData(value)
@@ -68,7 +70,7 @@ class Metadata(object):
if self.is_integer:
return int(self)
elif self.is_string or self.is_raw:
- return str(self)
+ return bytes(self)
elif self.is_float:
return float(self)
elif self.is_boolean:
@@ -189,6 +191,9 @@ class Metadata(object):
raise ValueError("Metadata object not a string or raw type")
+ def __bytes__(self):
+ return bytes(bytearray(ord(i) for i in self.__str__()))
+
def __int__(self):
if self.is_signed_integer:
return core.BNMetadataGetSignedInteger(self.handle)