diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-05-09 09:24:11 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2017-05-10 21:37:27 +0200 |
commit | bd221493a98260bcd7d1e49e1748c09eae4ebf54 (patch) | |
tree | c13f21372d0fe426a3b7727b6724cb96e066a6a7 /embeddedobj | |
parent | bb51303007ff1588dc467b270651619e3eff282e (diff) |
Related: tdf#62702 handle EmbeddedOdf like CONTENTS on ole activate attempt
(cherry picked from commit 8db9cfd2973b3e6f0c682fe8961540d528e6d493)
Related: tdf#62702 also try various other known streams for object content
(cherry picked from commit 013e34d875aeb75d9660af7c18967c2d468cbd74)
Change-Id: I11f1d6ad049cada1cadfe97a440b7ae562ba4ced
5b5fa61e9930ba0eaa5ac86e4231050c9ebebf8a
Reviewed-on: https://gerrit.libreoffice.org/37434
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
(cherry picked from commit 8f45915b6c76ace7aeffaa042d487e8e2d7f4d89)
Diffstat (limited to 'embeddedobj')
-rw-r--r-- | embeddedobj/source/msole/oleembed.cxx | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/embeddedobj/source/msole/oleembed.cxx b/embeddedobj/source/msole/oleembed.cxx index 2faed0ba62be..e26875732ef3 100644 --- a/embeddedobj/source/msole/oleembed.cxx +++ b/embeddedobj/source/msole/oleembed.cxx @@ -711,18 +711,33 @@ namespace "com.sun.star.embed.OLESimpleStorage", aArgs ), uno::UNO_QUERY_THROW ); - uno::Reference< io::XStream > xCONTENTS; - try + //various stream names that can contain the real document contents for + //this object in a straightforward direct way + static const OUStringLiteral aStreamNames[] = { - xNameContainer->getByName("CONTENTS") >>= xCONTENTS; - } - catch (container::NoSuchElementException const&) + OUStringLiteral("CONTENTS"), + OUStringLiteral("Package"), + OUStringLiteral("EmbeddedOdf"), + OUStringLiteral("WordDocument"), + OUStringLiteral("Workbook"), + OUStringLiteral("PowerPoint Document") + }; + + bool bCopied = false; + for (size_t i = 0; i < SAL_N_ELEMENTS(aStreamNames) && !bCopied; ++i) { - // ignore + uno::Reference<io::XStream> xEmbeddedFile; + try + { + xNameContainer->getByName(aStreamNames[i]) >>= xEmbeddedFile; + } + catch (const container::NoSuchElementException&) + { + // ignore + } + bCopied = xEmbeddedFile.is() && lcl_CopyStream(xEmbeddedFile->getInputStream(), xStream->getOutputStream()); } - bool bCopied = xCONTENTS.is() && lcl_CopyStream(xCONTENTS->getInputStream(), xStream->getOutputStream()); - if (!bCopied) { uno::Reference< io::XStream > xOle10Native; |