summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-09-18 21:17:32 +0100
committerMichael Stahl <mstahl@redhat.com>2017-09-19 13:39:55 +0200
commit9e60b45997d74955e5b997d58a1cb357f27d4407 (patch)
treeffd2a3a60b0cc1edb5d601cac89f7f1260950635
parentc7fe1daf67e99beea78fee8d7cef70443ff4e54f (diff)
tdf#112399 ignore size of unknown/unused ole2 entries
Change-Id: I9908453c1a11997141f7d6c4e1dccff53984321c Reviewed-on: https://gerrit.libreoffice.org/42438 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r--sot/qa/cppunit/data/pass/fdo41642-2.compound (renamed from sot/qa/cppunit/data/fail/fdo41642-2.compound)bin35335 -> 35335 bytes
-rw-r--r--sot/qa/cppunit/data/pass/tdf112399-1.compoundbin0 -> 103427 bytes
-rw-r--r--sot/source/sdstor/stgelem.cxx12
3 files changed, 12 insertions, 0 deletions
diff --git a/sot/qa/cppunit/data/fail/fdo41642-2.compound b/sot/qa/cppunit/data/pass/fdo41642-2.compound
index b1ae6dd63046..b1ae6dd63046 100644
--- a/sot/qa/cppunit/data/fail/fdo41642-2.compound
+++ b/sot/qa/cppunit/data/pass/fdo41642-2.compound
Binary files differ
diff --git a/sot/qa/cppunit/data/pass/tdf112399-1.compound b/sot/qa/cppunit/data/pass/tdf112399-1.compound
new file mode 100644
index 000000000000..d3628def0c01
--- /dev/null
+++ b/sot/qa/cppunit/data/pass/tdf112399-1.compound
Binary files differ
diff --git a/sot/source/sdstor/stgelem.cxx b/sot/source/sdstor/stgelem.cxx
index 0fb80c4a36cc..c44d15849259 100644
--- a/sot/source/sdstor/stgelem.cxx
+++ b/sot/source/sdstor/stgelem.cxx
@@ -424,6 +424,18 @@ bool StgEntry::Load(const void* pFrom, sal_uInt32 nBufSize, sal_uInt64 nUnderlyi
//bad pageid
return false;
}
+ if (m_cType == STG_EMPTY)
+ {
+ /*
+ tdf#112399 opens fine in MSOffice 2013 despite a massive m_nSize field
+
+ Free (unused) directory entries are marked with Object Type 0x0
+ (unknown or unallocated). The entire directory entry must consist of
+ all zeroes except for the child, right sibling, and left sibling
+ pointers, which must be initialized to NOSTREAM (0xFFFFFFFF).
+ */
+ m_nSize = 0;
+ }
if (m_nSize < 0)
{
// the size makes no sense for the substorage