diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-09-22 12:32:28 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-09-22 18:09:44 +0200 |
commit | 893c08b59abf31ee0ae50c4ac030b006c43c0976 (patch) | |
tree | 750ab03b55ec72c55dbc1640d5d5d4222e04e88b /sot | |
parent | a395698d3df12d1deaec25b31ae02e019a281867 (diff) |
move TestImportOLE2 where it can be used by fftester
Change-Id: I7b41d9ec673cfb96f51b5008540df63fe78a7581
Reviewed-on: https://gerrit.libreoffice.org/42639
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sot')
-rw-r--r-- | sot/source/sdstor/stg.cxx | 1 | ||||
-rw-r--r-- | sot/source/sdstor/storage.cxx | 48 |
2 files changed, 48 insertions, 1 deletions
diff --git a/sot/source/sdstor/stg.cxx b/sot/source/sdstor/stg.cxx index 67ea06b8f815..f82cd30d5e80 100644 --- a/sot/source/sdstor/stg.cxx +++ b/sot/source/sdstor/stg.cxx @@ -941,5 +941,4 @@ bool Storage::Equals( const BaseStorage& rStorage ) const return pOther && ( pOther->pEntry == pEntry ); } - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sot/source/sdstor/storage.cxx b/sot/source/sdstor/storage.cxx index 4445872b5f2b..9d19bafafedb 100644 --- a/sot/source/sdstor/storage.cxx +++ b/sot/source/sdstor/storage.cxx @@ -809,4 +809,52 @@ sal_Int32 SotStorage::GetVersion( const css::uno::Reference < css::embed::XStora return 0; } +namespace +{ + void traverse(const tools::SvRef<SotStorage>& rStorage, std::vector<unsigned char>& rBuf) + { + SvStorageInfoList infos; + + rStorage->FillInfoList(&infos); + + for (const auto& info: infos) + { + if (info.IsStream()) + { + // try to open and read all content + tools::SvRef<SotStorageStream> xStream(rStorage->OpenSotStream(info.GetName(), StreamMode::STD_READ)); + const size_t nSize = xStream->GetSize(); + const size_t nRead = xStream->ReadBytes(rBuf.data(), nSize); + SAL_INFO("sot", "Read " << nRead << "bytes"); + } + else if (info.IsStorage()) + { + tools::SvRef<SotStorage> xStorage(rStorage->OpenSotStorage(info.GetName(), StreamMode::STD_READ)); + + // continue with children + traverse(xStorage, rBuf); + } + else + { + } + } + } +} + +extern "C" SAL_DLLPUBLIC_EXPORT bool SAL_CALL TestImportOLE2(SvStream &rStream) +{ + try + { + size_t nSize = rStream.remainingSize(); + tools::SvRef<SotStorage> xRootStorage(new SotStorage(&rStream, false)); + std::vector<unsigned char> aTmpBuf(nSize); + traverse(xRootStorage, aTmpBuf); + } + catch (...) + { + return false; + } + return true; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |