diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-11-07 09:12:23 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-11-07 15:07:11 +0100 |
commit | dbe94dd3b64e74f661ea7193d8e06ac91f1dd7b0 (patch) | |
tree | dec170dd91227733b7cec974da317fcc9edfa02d /tools | |
parent | edbb7a39c7a954f8c773e6bdf136e65b70299dd5 (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.cxx | 16 |
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) { |