diff options
author | Maxim Monastirsky <momonasmon@gmail.com> | 2015-12-24 21:49:23 +0200 |
---|---|---|
committer | Maxim Monastirsky <momonasmon@gmail.com> | 2015-12-25 12:25:51 +0200 |
commit | 5e4124396cafc2b0a435f17a66b33e36303ae4e4 (patch) | |
tree | 393ff7a24bf20cad1929322e5ef63313d04bd74f | |
parent | ff01ea8419db4b8ec81bd0d6edfc673d7140b4fd (diff) |
tdf#96713 OdfFlatXml: Seek to 0 before reading
Similar to tdf#45418.
The problem is that sfx2 DocumentInserter code calls SfxMedium::IsStorage,
which reads the stream but doesn't correctly seek back to 0. Actually
SfxMedium_Impl has 2 members for the input stream, one of SvStream type
and another one as Reference<XInputStream>. Turns out that reading with
SvStream::Read changes the position in the object referenced by
Reference<XInputStream>, but SvStream::Seek doesn't, so Seek(0) doesn't
do the desired effect.
My current solution is to ensure that we're reading from 0 inside the
filter. I think it's a good thing to do anyway, and should be sufficient,
given that other filters doesn't seem to be affected by this bug.
Change-Id: I49b41077032d3e395c675e4f7824cc778c075473
-rw-r--r-- | filter/source/odfflatxml/OdfFlatXml.cxx | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/filter/source/odfflatxml/OdfFlatXml.cxx b/filter/source/odfflatxml/OdfFlatXml.cxx index 8022178efd2b..2d32977ae9c7 100644 --- a/filter/source/odfflatxml/OdfFlatXml.cxx +++ b/filter/source/odfflatxml/OdfFlatXml.cxx @@ -147,6 +147,10 @@ OdfFlatXml::importer( saxParser->setDocumentHandler(docHandler); try { + css::uno::Reference< css::io::XSeekable > xSeekable( inputStream, css::uno::UNO_QUERY ); + if ( xSeekable.is() ) + xSeekable->seek( 0 ); + saxParser->parseStream(inputSource); } catch (const Exception &exc) |