summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2017-05-12 11:28:15 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2017-05-12 11:28:22 +0200
commit5639dd87a294023f9eec0ef8005d7e2d673a7f91 (patch)
treed98558a4e450803e6c0bf529e4ba2144336698ce
parent59fb7178e702a1e4625e227baae59cf470712cee (diff)
msometa: dump VectorHeader
-rw-r--r--msodumper/msometa.py27
1 files changed, 24 insertions, 3 deletions
diff --git a/msodumper/msometa.py b/msodumper/msometa.py
index ed8d151..ec62103 100644
--- a/msodumper/msometa.py
+++ b/msodumper/msometa.py
@@ -308,18 +308,39 @@ class TypedPropertyValue(BinaryStream):
elif self.Type == 0x0040: # VT_FILETIME
FILETIME(self, "Value").dump()
elif self.Type == 0x001E: # VT_LPSTR
- CodePageString(self, "Value").dump()
+ CodePageString(self, "Value", self.parent.getCodePage()).dump()
+ elif self.Type == 0x101E: # VT_VECTOR | VT_LPSTR
+ VectorHeader(self, "Value", self.parent.getCodePage()).dump()
else:
print '<todo what="TypedPropertyValue::dump: unhandled Type %s"/>' % hex(self.Type)
print '</typedPropertyValue%s>' % self.index
+class VectorHeader(BinaryStream):
+ """Defined by [MS-OLEPS] 2.14.2, represents the number of scalar values in
+ a vector property type."""
+ def __init__(self, parent, name, codepage):
+ BinaryStream.__init__(self, parent.bytes)
+ self.pos = parent.pos
+ self.parent = parent
+ self.name = name
+ self.codepage = codepage
+
+ def dump(self):
+ print '<%s type="VectorHeader">' % self.name
+ self.printAndSet("Length", self.readuInt32())
+ for dummy in range(self.Length):
+ CodePageString(self, "String", self.codepage).dump()
+ print '</%s>' % self.name
+
+
class CodePageString(BinaryStream):
- def __init__(self, parent, name):
+ def __init__(self, parent, name, codepage):
BinaryStream.__init__(self, parent.bytes)
self.pos = parent.pos
self.parent = parent
self.name = name
+ self.codepage = codepage
def dump(self):
print '<%s type="CodePageString">' % self.name
@@ -330,7 +351,7 @@ class CodePageString(BinaryStream):
if c == 0:
break
bytes.append(c)
- codepage = self.parent.parent.getCodePage()
+ codepage = self.codepage
if (codepage is not None) and (codepage < 0):
codepage += 2 ** 16 # signed -> unsigned
encoding = ""