* Fixed adding a raw string on python3 * Fix a missing parenthesis * Ensure a raw string is converted to bytes when creating a new Metadata
| -rw-r--r-- | python/metadata.py | 11 |
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) |