Kaydet (Commit) 2b61ae38 authored tarafından Caolán McNamara's avatar Caolán McNamara

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
üst 1d5c3028
......@@ -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)
......
......@@ -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: */
......@@ -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)
......
......@@ -40,7 +40,7 @@ class ScQProReader
bool mbEndOfFile;
public:
ScQProReader( SfxMedium &rMedium );
ScQProReader(SvStream* pStream);
~ScQProReader();
bool recordsLeft();
......
......@@ -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 );
......
......@@ -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())
......
......@@ -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&,
......
......@@ -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)
{
......
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