summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-06-02 11:19:36 +0100
committerCaolán McNamara <caolanm@redhat.com>2017-06-02 11:20:57 +0100
commit2b61ae38d410e0748e53ac3c0d361ab622da1fb5 (patch)
treebce6a76319086c59208f2f89399129eff9ca602b
parent1d5c3028dcff26b16bccd9d11380ece5abfadf14 (diff)
rework ScQProReader to take SvStream instead of SfxMedium
its only uses the stream anyway and this makes it far easier to build a fuzzer on Change-Id: I4aa8b56d4b041708c4de1730d503641ab23c14e8
-rw-r--r--sc/inc/filter.hxx2
-rw-r--r--sc/source/filter/excel/excel.cxx17
-rw-r--r--sc/source/filter/inc/ftools.hxx2
-rw-r--r--sc/source/filter/inc/qpro.hxx2
-rw-r--r--sc/source/filter/qpro/qpro.cxx8
-rw-r--r--sc/source/ui/docshell/docsh.cxx2
-rw-r--r--sc/source/ui/docshell/impex.cxx2
-rw-r--r--vcl/workben/fftester.cxx23
8 files changed, 37 insertions, 21 deletions
diff --git a/sc/inc/filter.hxx b/sc/inc/filter.hxx
index c96e9c20e49b..ce4fac78d442 100644
--- a/sc/inc/filter.hxx
+++ b/sc/inc/filter.hxx
@@ -75,7 +75,7 @@ class SAL_DLLPUBLIC_RTTI ScFormatFilterPlugin {
public:
// various import filters
virtual FltError ScImportLotus123( SfxMedium&, ScDocument*, rtl_TextEncoding eSrc ) = 0;
- virtual FltError ScImportQuattroPro( SfxMedium &rMedium, ScDocument *pDoc ) = 0;
+ virtual FltError ScImportQuattroPro(SvStream* pStream, ScDocument *pDoc) = 0;
virtual FltError ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ) = 0;
// eFormat == EIF_AUTO -> matching filter is used automatically
// eFormat == EIF_BIFF5 -> only Biff5 stream is read successfully (in an Excel97 doc, too)
diff --git a/sc/source/filter/excel/excel.cxx b/sc/source/filter/excel/excel.cxx
index e5462e838a0e..8988935f80f0 100644
--- a/sc/source/filter/excel/excel.cxx
+++ b/sc/source/filter/excel/excel.cxx
@@ -219,18 +219,21 @@ FltError ScFormatFilterPluginImpl::ScExportExcel5( SfxMedium& rMedium, ScDocumen
return eRet;
}
-extern "C" SAL_DLLPUBLIC_EXPORT bool SAL_CALL TestImportSpreadsheet(const OUString &rURL, const OUString &rFlt)
+extern "C" SAL_DLLPUBLIC_EXPORT bool SAL_CALL TestImportQPW(SvStream &rStream)
+{
+ ScDLL::Init();
+ ScDocument aDocument;
+ aDocument.MakeTable(0);
+ return ScFormatFilter::Get().ScImportQuattroPro(&rStream, &aDocument) == eERR_OK;
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT bool SAL_CALL TestImportXLS(const OUString &rURL)
{
ScDLL::Init();
SfxMedium aMedium(rURL, StreamMode::READ);
ScDocument aDocument;
aDocument.MakeTable(0);
- FltError eError(eERR_OK);
- if (rFlt == "xls")
- eError = ScFormatFilter::Get().ScImportExcel(aMedium, &aDocument, EIF_AUTO);
- else if (rFlt == "wb2")
- eError = ScFormatFilter::Get().ScImportQuattroPro(aMedium, &aDocument);
- return eError == eERR_OK;
+ return ScFormatFilter::Get().ScImportExcel(aMedium, &aDocument, EIF_AUTO) == eERR_OK;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/filter/inc/ftools.hxx b/sc/source/filter/inc/ftools.hxx
index ea2ce501ac67..c1403dea28f1 100644
--- a/sc/source/filter/inc/ftools.hxx
+++ b/sc/source/filter/inc/ftools.hxx
@@ -264,7 +264,7 @@ public:
virtual ~ScFormatFilterPluginImpl();
// various import filters
virtual FltError ScImportLotus123( SfxMedium&, ScDocument*, rtl_TextEncoding eSrc ) override;
- virtual FltError ScImportQuattroPro( SfxMedium &rMedium, ScDocument *pDoc ) override;
+ virtual FltError ScImportQuattroPro(SvStream* pStream, ScDocument *pDoc) override;
virtual FltError ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ) override;
// eFormat == EIF_AUTO -> matching filter is used automatically
// eFormat == EIF_BIFF5 -> only Biff5 stream leads to success (even in an Excel97 doc)
diff --git a/sc/source/filter/inc/qpro.hxx b/sc/source/filter/inc/qpro.hxx
index 751ec859109b..55e5e7ccd1bb 100644
--- a/sc/source/filter/inc/qpro.hxx
+++ b/sc/source/filter/inc/qpro.hxx
@@ -40,7 +40,7 @@ class ScQProReader
bool mbEndOfFile;
public:
- ScQProReader( SfxMedium &rMedium );
+ ScQProReader(SvStream* pStream);
~ScQProReader();
bool recordsLeft();
diff --git a/sc/source/filter/qpro/qpro.cxx b/sc/source/filter/qpro/qpro.cxx
index 07adc4d4ccfd..5b35e3b155c8 100644
--- a/sc/source/filter/qpro/qpro.cxx
+++ b/sc/source/filter/qpro/qpro.cxx
@@ -123,20 +123,20 @@ FltError ScQProReader::readSheet( SCTAB nTab, ScDocument* pDoc, ScQProStyle *pSt
return eRet;
}
-FltError ScFormatFilterPluginImpl::ScImportQuattroPro( SfxMedium &rMedium, ScDocument *pDoc )
+FltError ScFormatFilterPluginImpl::ScImportQuattroPro(SvStream *pStream, ScDocument *pDoc)
{
- ScQProReader aReader( rMedium );
+ ScQProReader aReader(pStream);
FltError eRet = aReader.import( pDoc );
return eRet;
}
-ScQProReader::ScQProReader( SfxMedium &rMedium )
+ScQProReader::ScQProReader(SvStream* pStream)
: mnId(0)
, mnLength(0)
, mnOffset(0)
+ , mpStream(pStream)
, mbEndOfFile(false)
{
- mpStream = rMedium.GetInStream();
if( mpStream )
{
mpStream->SetBufferSize( 65535 );
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 03131b4be5cd..a1011779ea2f 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -1372,7 +1372,7 @@ bool ScDocShell::ConvertFrom( SfxMedium& rMedium )
}
else if (aFltName == pFilterQPro6)
{
- FltError eError = ScFormatFilter::Get().ScImportQuattroPro( rMedium, &aDocument);
+ FltError eError = ScFormatFilter::Get().ScImportQuattroPro(rMedium.GetInStream(), &aDocument);
if (eError != eERR_OK)
{
if (!GetError())
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index 70288a814c8b..22b9a1b3f5d7 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -2217,7 +2217,7 @@ class ScFormatFilterMissing : public ScFormatFilterPlugin {
}
virtual ~ScFormatFilterMissing() {}
virtual FltError ScImportLotus123( SfxMedium&, ScDocument*, rtl_TextEncoding ) override { return eERR_INTERN; }
- virtual FltError ScImportQuattroPro( SfxMedium &, ScDocument * ) override { return eERR_INTERN; }
+ virtual FltError ScImportQuattroPro(SvStream*, ScDocument *) override { return eERR_INTERN; }
virtual FltError ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ) override { return eERR_INTERN; }
virtual FltError ScImportStarCalc10( SvStream&, ScDocument* ) override { return eERR_INTERN; }
virtual FltError ScImportDif( SvStream&, ScDocument*, const ScAddress&,
diff --git a/vcl/workben/fftester.cxx b/vcl/workben/fftester.cxx
index 0251274b0ee9..eae827a81e9f 100644
--- a/vcl/workben/fftester.cxx
+++ b/vcl/workben/fftester.cxx
@@ -66,7 +66,7 @@ using namespace cppu;
extern "C" { static void SAL_CALL thisModule() {} }
#endif
-typedef bool (*WFilterCall)(const OUString &rUrl, const OUString &rFlt);
+typedef bool (*WFilterCall)(const OUString &rUrl);
typedef bool (*FFilterCall)(SvStream &rStream);
/* This constant specifies the number of inputs to process before restarting.
@@ -379,8 +379,7 @@ try_again:
SvFileStream aFileStream(out, StreamMode::READ);
ret = (int) (*pfnImport)(aFileStream);
}
- else if ( (strcmp(argv[2], "xls") == 0) ||
- (strcmp(argv[2], "wb2") == 0) )
+ else if (strcmp(argv[2], "xls") == 0)
{
static WFilterCall pfnImport(nullptr);
if (!pfnImport)
@@ -388,10 +387,24 @@ try_again:
osl::Module aLibrary;
aLibrary.loadRelative(&thisModule, "libscfiltlo.so", SAL_LOADMODULE_LAZY);
pfnImport = reinterpret_cast<WFilterCall>(
- aLibrary.getFunctionSymbol("TestImportSpreadsheet"));
+ aLibrary.getFunctionSymbol("TestImportXLS"));
aLibrary.release();
}
- ret = (int) (*pfnImport)(out, OUString(argv[2], strlen(argv[2]), RTL_TEXTENCODING_UTF8));
+ ret = (int) (*pfnImport)(out);
+ }
+ else if (strcmp(argv[2], "ww2") == 0)
+ {
+ static FFilterCall pfnImport(nullptr);
+ if (!pfnImport)
+ {
+ osl::Module aLibrary;
+ aLibrary.loadRelative(&thisModule, "libscfiltlo.so", SAL_LOADMODULE_LAZY);
+ pfnImport = reinterpret_cast<FFilterCall>(
+ aLibrary.getFunctionSymbol("TestImportQPW"));
+ aLibrary.release();
+ }
+ SvFileStream aFileStream(out, StreamMode::READ);
+ ret = (int) (*pfnImport)(aFileStream);
}
else if (strcmp(argv[2], "hwp") == 0)
{