[Libreoffice-commits] mso-dumper.git: src/docrecord.py
Miklos Vajna
vmiklos at kemper.freedesktop.org
Sat May 25 12:27:33 PDT 2013
src/docrecord.py | 31 +++++++++++++++++--------------
1 file changed, 17 insertions(+), 14 deletions(-)
New commits:
commit e9cae449e8121de7f6b042efd36b5697eb9e3e7b
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Sat May 25 21:26:45 2013 +0200
STD: guard against reading too much
Triggered by fdo49108-1.doc.
diff --git a/src/docrecord.py b/src/docrecord.py
index c2a73d0..2e01e47 100644
--- a/src/docrecord.py
+++ b/src/docrecord.py
@@ -2313,14 +2313,15 @@ class Stdf(DOCDirStream):
self.stdfBase = StdfBase(self.bytes, self.mainStream, self.pos)
self.stdfBase.dump()
self.pos += self.stdfBase.size
- stsh = self.std.lpstd.stsh # root of the stylesheet table
- cbSTDBaseInFile = stsh.lpstshi.stshi.stshif.cbSTDBaseInFile
- print '<stdfPost2000OrNone cbSTDBaseInFile="%s">' % hex(cbSTDBaseInFile)
- if cbSTDBaseInFile == 0x0012:
- stdfPost2000 = StdfPost2000(self)
- stdfPost2000.dump()
- self.pos = stdfPost2000.pos
- print '</stdfPost2000OrNone>'
+ if self.pos - self.std.pos < self.std.size:
+ stsh = self.std.lpstd.stsh # root of the stylesheet table
+ cbSTDBaseInFile = stsh.lpstshi.stshi.stshif.cbSTDBaseInFile
+ print '<stdfPost2000OrNone cbSTDBaseInFile="%s">' % hex(cbSTDBaseInFile)
+ if cbSTDBaseInFile == 0x0012:
+ stdfPost2000 = StdfPost2000(self)
+ stdfPost2000.dump()
+ self.pos = stdfPost2000.pos
+ print '</stdfPost2000OrNone>'
print '</stdf>'
class Xst(DOCDirStream):
@@ -2566,6 +2567,7 @@ class STD(DOCDirStream):
DOCDirStream.__init__(self, lpstd.bytes, mainStream = lpstd.mainStream)
self.lpstd = lpstd
self.pos = lpstd.pos
+ self.posOrig = self.pos
self.size = lpstd.cbStd
def dump(self):
@@ -2573,12 +2575,13 @@ class STD(DOCDirStream):
self.stdf = Stdf(self)
self.stdf.dump()
self.pos = self.stdf.pos
- xstzName = Xstz(self)
- xstzName.dump()
- self.pos = xstzName.pos
- grLPUpxSw = GrLPUpxSw(self)
- grLPUpxSw.dump()
- self.pos = grLPUpxSw.pos
+ if self.pos - self.posOrig < self.size:
+ xstzName = Xstz(self)
+ xstzName.dump()
+ self.pos = xstzName.pos
+ grLPUpxSw = GrLPUpxSw(self)
+ grLPUpxSw.dump()
+ self.pos = grLPUpxSw.pos
print '</std>'
class LPStd(DOCDirStream):
More information about the Libreoffice-commits
mailing list