[Libreoffice-commits] mso-dumper.git: 2 commits - src/docdirstream.py src/docrecord.py
Miklos Vajna
vmiklos at kemper.freedesktop.org
Fri May 24 09:00:38 PDT 2013
src/docdirstream.py | 3 +++
src/docrecord.py | 5 +++--
2 files changed, 6 insertions(+), 2 deletions(-)
New commits:
commit 7918464989883ee64b7dd0bb5b602b6b791e100d
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Fri May 24 17:37:17 2013 +0200
Selsf: check for the size from the spec
E.g. fdo45983-1.doc has some additional bytes after the documented struct.
diff --git a/src/docrecord.py b/src/docrecord.py
index 0563cb2..c2a73d0 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -337,6 +337,7 @@ class Sty(DOCDirStream):
self.parent.pos = self.pos
class Selsf(DOCDirStream):
+ size = 36 # defined by 2.9.241
"""The Selsf structure specifies the last selection that was made to the document."""
def __init__(self, mainStream):
DOCDirStream.__init__(self, mainStream.getTableStream().bytes)
@@ -380,7 +381,7 @@ class Selsf(DOCDirStream):
self.printAndSet("cpAnchorShrink", self.readuInt32())
self.printAndSet("xaTableLeft", self.readInt16())
self.printAndSet("xaTableRight", self.readInt16())
- assert self.pos == self.mainStream.fcWss + self.size
+ assert self.pos == self.mainStream.fcWss + Selsf.size
print '</selsf>'
class BRC(DOCDirStream):
commit aad5403441fed65a8fecefc10d147a066c0a521f
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Fri May 24 17:06:22 2013 +0200
Sprm: don't read 4 bytes when operand size is 3
Triggered by fdo45100-1.doc
diff --git a/src/docdirstream.py b/src/docdirstream.py
index 4e29943..c3e4207 100644
--- a/src/docdirstream.py
+++ b/src/docdirstream.py
@@ -78,6 +78,9 @@ class DOCDirStream:
self.pos += 2
return ret
+ def getuInt24(self):
+ return struct.unpack("<I", self.bytes[self.pos:self.pos+3] + "\x00")[0]
+
def getuInt32(self, bytes = None, pos = None):
if not bytes:
bytes = self.bytes
diff --git a/src/docrecord.py b/src/docrecord.py
index 8d90b51..0563cb2 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -732,7 +732,7 @@ class Sprm(DOCDirStream):
elif self.getOperandSize() == 2:
self.operand = self.getuInt16()
elif self.getOperandSize() == 3:
- self.operand = self.getuInt32() & 0x0fff
+ self.operand = self.getuInt24()
elif self.getOperandSize() == 4:
self.operand = self.getuInt32()
elif self.getOperandSize() == 7:
More information about the Libreoffice-commits
mailing list