summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2018-11-07 09:12:23 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2018-11-07 15:07:11 +0100
commitdbe94dd3b64e74f661ea7193d8e06ac91f1dd7b0 (patch)
treedec170dd91227733b7cec974da317fcc9edfa02d /tools
parentedbb7a39c7a954f8c773e6bdf136e65b70299dd5 (diff)
tdf#120657 Pie chart saved as DOC doesn't preview in MSO
regression from commit 9ec8bf8f22fe74884185492ef2576ce79b41e4f1 add SvStream::TellEnd the problem is that in this stack trace sot/source/sdstor/stgelem.hxx:130 sot/source/sdstor/stgdir.cxx:300 sot/source/sdstor/stg.cxx:245 sot/source/sdstor/storage.cxx:187 tools/source/stream/stream.cxx:1908 sw/source/filter/ww8/ww8scan.cxx:6267 The StgEntry returns a size of 0. If we do something else to the SotStorageStream first, then it materialises a temporary stream, and that stream returns a valid size. Also implement suggestions from mike kaganski: IMO, it would be more robust to implement this new function as virtual (instead of the remainingSize()), and reimplement the latter as non-virtual one using the new one and doing the necessary correction. Change-Id: Id1462d918570a684ec67099c30181436a27d3c6a Reviewed-on: https://gerrit.libreoffice.org/62984 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'tools')
-rw-r--r--tools/source/stream/stream.cxx16
1 files changed, 10 insertions, 6 deletions
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
index 818726b2a619..a0160348dff7 100644
--- a/tools/source/stream/stream.cxx
+++ b/tools/source/stream/stream.cxx
@@ -1425,12 +1425,21 @@ bool checkSeek(SvStream &rSt, sal_uInt64 nOffset)
sal_uInt64 SvStream::remainingSize()
{
sal_uInt64 const nCurr = Tell();
- sal_uInt64 const nEnd = Seek(STREAM_SEEK_TO_END);
+ sal_uInt64 const nEnd = TellEnd();
sal_uInt64 nMaxAvailable = nEnd > nCurr ? (nEnd-nCurr) : 0;
Seek(nCurr);
return nMaxAvailable;
}
+sal_uInt64 SvStream::TellEnd()
+{
+ FlushBuffer(true);
+ sal_uInt64 const nCurr = Tell();
+ sal_uInt64 const nEnd = Seek(STREAM_SEEK_TO_END);
+ Seek(nCurr);
+ return nEnd;
+}
+
void SvStream::Flush()
{
FlushBuffer(m_isConsistent);
@@ -1903,11 +1912,6 @@ void SvMemoryStream::SetSize(sal_uInt64 const nNewSize)
ReAllocateMemory( nDiff );
}
-sal_uInt64 SvStream::TellEnd()
-{
- return Tell() + remainingSize();
-}
-
//Create a OString of nLen bytes from rStream
OString read_uInt8s_ToOString(SvStream& rStrm, std::size_t nLen)
{