diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/binaryview.py | 4 | ||||
| -rw-r--r-- | python/metadata.py | 11 |
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) |
