summaryrefslogtreecommitdiff
path: root/msodumper
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2015-12-08 12:27:53 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2015-12-08 12:27:53 +0100
commitfcdd7ef280270953ef2c0c9512c6efb29125764b (patch)
tree757256a06d70f0e4b268d594aab5abffb48e3b80 /msodumper
parentdedeea77ee779636b8a396649c1dd9f9a78c8618 (diff)
docrecord: handle fAnsiString == 0 in PBString
Diffstat (limited to 'msodumper')
-rw-r--r--msodumper/docrecord.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/msodumper/docrecord.py b/msodumper/docrecord.py
index 9108dca..5f8dc21 100644
--- a/msodumper/docrecord.py
+++ b/msodumper/docrecord.py
@@ -4142,14 +4142,19 @@ class PBString(DOCDirStream):
self.printAndSet("cch", buf & 0x7fff) # bits 0..15
self.printAndSet("fAnsiString", self.getBit(buf, 15))
- # TODO support fAnsiString == 0
bytes = []
- for dummy in range(self.cch):
+ if self.fAnsiString:
+ cch = self.cch
+ else:
+ cch = self.cch * 2
+ for dummy in range(cch):
c = self.readuInt8()
- if c == 0:
- break
bytes.append(c)
- encoding = "ascii"
+
+ if self.fAnsiString == 1:
+ encoding = "ascii"
+ else:
+ encoding = "utf-16"
self.printAndSet("rgxch", globals.encodeName("".join(map(lambda c: chr(c), bytes)).decode(encoding), lowOnly=True).encode('utf-8'), hexdump=False)
print '</%s>' % self.name