Kaydet (Commit) 893c08b5 authored tarafından Caolán McNamara's avatar Caolán McNamara

move TestImportOLE2 where it can be used by fftester

Change-Id: I7b41d9ec673cfb96f51b5008540df63fe78a7581
Reviewed-on: https://gerrit.libreoffice.org/42639Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst a395698d
......@@ -941,5 +941,4 @@ bool Storage::Equals( const BaseStorage& rStorage ) const
return pOther && ( pOther->pEntry == pEntry );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -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: */
......@@ -532,7 +532,20 @@ try_again:
SvFileStream aFileStream(out, StreamMode::READ);
ret = (int) (*pfnImport)(aFileStream);
}
else if (strcmp(argv[2], "ole") == 0)
{
static FFilterCall pfnImport(nullptr);
if (!pfnImport)
{
osl::Module aLibrary;
aLibrary.loadRelative(&thisModule, "libsotlo.so", SAL_LOADMODULE_LAZY);
pfnImport = reinterpret_cast<FFilterCall>(
aLibrary.getFunctionSymbol("TestImportOLE2"));
aLibrary.release();
}
SvFileStream aFileStream(out, StreamMode::READ);
ret = (int) (*pfnImport)(aFileStream);
}
#endif
}
......
......@@ -7,60 +7,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <vector>
#include <sot/storage.hxx>
#include <tools/stream.hxx>
#include "commonfuzzer.hxx"
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);
(void) nRead;
}
else if (info.IsStorage())
{
tools::SvRef<SotStorage> xStorage(rStorage->OpenSotStorage(info.GetName(), StreamMode::STD_READ));
// continue with children
traverse(xStorage, rBuf);
}
else
{
}
}
}
void TestImportOLE2(SvStream &rStream, size_t nSize)
{
try
{
tools::SvRef<SotStorage> xRootStorage(new SotStorage(&rStream, false));
std::vector<unsigned char> aTmpBuf(nSize);
traverse(xRootStorage, aTmpBuf);
}
catch (...)
{
}
}
}
extern "C" bool TestImportOLE2(SvStream &rStream);
extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
{
......@@ -71,7 +21,7 @@ extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv)
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
{
SvMemoryStream aStream(const_cast<uint8_t*>(data), size, StreamMode::READ);
TestImportOLE2(aStream, size);
TestImportOLE2(aStream);
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment