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

rework filters test to squeeze through extra flags

that are needed to load .odt, .sxw etc files, and
add a regression test for CVE-2012-4233

Change-Id: Ie178725ded3d76942030d12f23074de519cf62de
üst 2ffd82c3
......@@ -34,7 +34,9 @@ class PictFilterTest
public:
PictFilterTest() : BootstrapFixture(true, false) {}
virtual bool load(const rtl::OUString &, const rtl::OUString &rURL, const rtl::OUString &);
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
/**
* Ensure CVEs remain unbroken
......@@ -47,7 +49,8 @@ public:
};
bool PictFilterTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
SvFileStream aFileStream(rURL, STREAM_READ);
Graphic aGraphic;
......
......@@ -54,7 +54,9 @@ class TgaFilterTest
public:
TgaFilterTest() : BootstrapFixture(true, false) {}
virtual bool load(const rtl::OUString &, const rtl::OUString &rURL, const rtl::OUString &);
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
/**
* Ensure CVEs remain unbroken
......@@ -67,7 +69,8 @@ public:
};
bool TgaFilterTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
SvFileStream aFileStream(rURL, STREAM_READ);
Graphic aGraphic;
......
......@@ -54,7 +54,9 @@ class TiffFilterTest
public:
TiffFilterTest() : BootstrapFixture(true, false) {}
virtual bool load(const rtl::OUString &, const rtl::OUString &rURL, const rtl::OUString &);
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
/**
* Ensure CVEs remain unbroken
......@@ -67,7 +69,8 @@ public:
};
bool TiffFilterTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
SvFileStream aFileStream(rURL, STREAM_READ);
Graphic aGraphic;
......
......@@ -45,7 +45,11 @@ namespace
{
public:
virtual void setUp();
virtual bool load(const rtl::OUString &, const rtl::OUString &rURL, const rtl::OUString &);
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
void test();
CPPUNIT_TEST_SUITE(HwpFilterTest);
......@@ -66,7 +70,8 @@ namespace
}
bool HwpFilterTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
uno::Sequence< beans::PropertyValue > aDescriptor(1);
aDescriptor[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("URL"));
......
......@@ -48,7 +48,8 @@ namespace
virtual void setUp();
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &);
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
void test();
......@@ -70,7 +71,8 @@ namespace
}
bool LotusWordProTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
uno::Sequence< beans::PropertyValue > aDescriptor(1);
aDescriptor[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("URL"));
......
......@@ -68,7 +68,7 @@ using namespace ::com::sun::star::uno;
namespace {
struct FileFormat {
const char* pName; const char* pFilterName; const char* pTypeName; sal_uLong nFormatType;
const char* pName; const char* pFilterName; const char* pTypeName; unsigned int nFormatType;
};
FileFormat aFileFormats[] = {
......@@ -89,9 +89,13 @@ class ScFiltersTest
public:
ScFiltersTest();
virtual bool load(const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData);
virtual bool load( const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData, unsigned int nFilterFlags,
unsigned int nClipboardID, unsigned int nFilterVersion);
ScDocShellRef load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData, const rtl::OUString& rTypeName, sal_uLong nFormatType=0);
const rtl::OUString &rUserData, const rtl::OUString& rTypeName,
unsigned int nFilterFlags, unsigned int nClipboardID, unsigned int nFilterVersion);
void createFileURL(const rtl::OUString& aFileBase, const rtl::OUString& aFileExtension, rtl::OUString& rFilePath);
void createCSVPath(const rtl::OUString& aFileBase, rtl::OUString& rFilePath);
......@@ -142,20 +146,18 @@ private:
};
ScDocShellRef ScFiltersTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData, const rtl::OUString& rTypeName, sal_uLong nFormatType)
const rtl::OUString &rUserData, const rtl::OUString& rTypeName,
unsigned int nFilterFlags, unsigned int nClipboardID, unsigned int nFilterVersion)
{
sal_uInt32 nFormat = 0;
if (nFormatType)
nFormat = SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS;
SfxFilter* aFilter = new SfxFilter(
SfxFilter* pFilter = new SfxFilter(
rFilter,
rtl::OUString(), nFormatType, nFormat, rTypeName, 0, rtl::OUString(),
rUserData, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("private:factory/scalc*")) );
aFilter->SetVersion(SOFFICE_FILEFORMAT_CURRENT);
rtl::OUString(), nFilterFlags, nClipboardID, rTypeName, 0, rtl::OUString(),
rUserData, rtl::OUString("private:factory/scalc*") );
pFilter->SetVersion(nFilterVersion);
ScDocShellRef xDocShRef = new ScDocShell;
SfxMedium* pSrcMed = new SfxMedium(rURL, STREAM_STD_READ);
pSrcMed->SetFilter(aFilter);
pSrcMed->SetFilter(pFilter);
if (!xDocShRef->DoLoad(pSrcMed))
{
xDocShRef->DoClose();
......@@ -167,9 +169,11 @@ ScDocShellRef ScFiltersTest::load(const rtl::OUString &rFilter, const rtl::OUStr
}
bool ScFiltersTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData)
const rtl::OUString &rUserData, unsigned int nFilterFlags,
unsigned int nClipboardID, unsigned int nFilterVersion)
{
ScDocShellRef xDocShRef = load(rFilter, rURL, rUserData, rtl::OUString());
ScDocShellRef xDocShRef = load(rFilter, rURL, rUserData,
rtl::OUString(), nFilterFlags, nClipboardID, nFilterVersion);
bool bLoaded = xDocShRef.Is();
//reference counting of ScDocShellRef is very confused.
if (bLoaded)
......@@ -227,7 +231,11 @@ void ScFiltersTest::testDir(osl::Directory& rDir, sal_uInt32 nType)
std::cout << "File: " << rtl::OUStringToOString(sURL, RTL_TEXTENCODING_UTF8).getStr() << std::endl;
//rtl::OStringBuffer aMessage("Failed loading: ");
//aMessage.append(rtl::OUStringToOString(sURL, RTL_TEXTENCODING_UTF8));
ScDocShellRef xDocSh = load( aFilterName,sURL, rtl::OUString(),aFilterType, aFileFormats[nType].nFormatType);
unsigned int nFormatType = aFileFormats[nType].nFormatType;
unsigned int nClipboardId = nFormatType ? SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS : 0;
ScDocShellRef xDocSh = load(aFilterName, sURL, rtl::OUString(),
aFilterType, nFormatType, nClipboardId, SOFFICE_FILEFORMAT_CURRENT);
// use this only if you're sure that all files can be loaded
// pay attention to lock files
//CPPUNIT_ASSERT_MESSAGE(aMessage.getStr(), xDocSh.Is());
......@@ -300,7 +308,10 @@ ScDocShellRef ScFiltersTest::loadDoc(const rtl::OUString& rName, sal_Int32 nForm
rtl::OUString aFileName;
createFileURL( rName, aFileExtension, aFileName );
rtl::OUString aFilterType(aFileFormats[nFormat].pTypeName, strlen(aFileFormats[nFormat].pTypeName), RTL_TEXTENCODING_UTF8);
ScDocShellRef xDocSh = load (aFilterName, aFileName, rtl::OUString(), aFilterType, aFileFormats[nFormat].nFormatType);
unsigned int nFormatType = aFileFormats[nFormat].nFormatType;
unsigned int nClipboardId = nFormatType ? SFX_FILTER_IMPORT | SFX_FILTER_USESOPTIONS : 0;
ScDocShellRef xDocSh = load(aFilterName, aFileName, rtl::OUString(), aFilterType,
nFormatType, nClipboardId, SOFFICE_FILEFORMAT_CURRENT);
CPPUNIT_ASSERT(xDocSh.Is());
return xDocSh;
}
......
......@@ -51,7 +51,7 @@ using namespace ::com::sun::star::uno;
namespace {
struct FileFormat {
const char* pName; const char* pFilterName; const char* pTypeName; sal_uLong nFormatType;
const char* pName; const char* pFilterName; const char* pTypeName; unsigned int nFormatType;
};
FileFormat aFileFormats[] = {
......
......@@ -62,7 +62,10 @@ public:
SdFiltersTest();
::sd::DrawDocShellRef loadURL( const rtl::OUString &rURL );
virtual bool load( const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData);
virtual bool load( const rtl::OUString &rFilter,
const rtl::OUString &rURL, const rtl::OUString &rUserData,
unsigned int nFilterFlags, unsigned int nClipboardID,
unsigned int nFilterVersion);
virtual void setUp();
virtual void tearDown();
......@@ -179,12 +182,14 @@ void SdFiltersTest::testN778859()
}
bool SdFiltersTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData)
const rtl::OUString &rUserData, unsigned int nFilterFlags, unsigned int nClipboardID,
unsigned int nFilterVersion)
{
SfxFilter aFilter(
rFilter,
rtl::OUString(), 0, 0, rtl::OUString(), 0, rtl::OUString(),
rtl::OUString(), nFilterFlags, nClipboardID, rtl::OUString(), 0, rtl::OUString(),
rUserData, rtl::OUString() );
aFilter.SetVersion(nFilterVersion);
::sd::DrawDocShellRef xDocShRef = new ::sd::DrawDocShell();
SfxMedium* pSrcMed = new SfxMedium(rURL, STREAM_STD_READ);
......
......@@ -76,7 +76,10 @@ public:
SdFiltersTest();
::sd::DrawDocShellRef loadURL( const rtl::OUString &rURL );
virtual bool load( const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData);
virtual bool load( const rtl::OUString &rFilter,
const rtl::OUString &rURL, const rtl::OUString &rUserData,
unsigned int nFilterFlags, unsigned int nClipboardID,
unsigned int nFilterVersion);
virtual void setUp();
virtual void tearDown();
......@@ -246,12 +249,14 @@ void SdFiltersTest::testStuff(::sd::DrawDocShellRef xDocShRef, const rtl::OStrin
}
bool SdFiltersTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData)
const rtl::OUString &rUserData, unsigned int nFilterFlags, unsigned int nClipboardID,
unsigned int nFilterVersion)
{
SfxFilter aFilter(
rFilter,
rtl::OUString(), 0, 0, rtl::OUString(), 0, rtl::OUString(),
rtl::OUString(), nFilterFlags, nClipboardID, rtl::OUString(), 0, rtl::OUString(),
rUserData, rtl::OUString() );
aFilter.SetVersion(nFilterVersion);
::sd::DrawDocShellRef xDocShRef = new ::sd::DrawDocShell();
SfxMedium* pSrcMed = new SfxMedium(rURL, STREAM_STD_READ);
......
......@@ -52,7 +52,8 @@ namespace
bool checkStorage( const SotStorageRef &xObjStor );
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &);
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
void test();
......@@ -107,9 +108,6 @@ namespace
for( SvStorageInfoList::iterator aIt = aInfoList.begin();
aIt != aInfoList.end(); ++aIt )
{
// fprintf( stderr, "Stream '%s' size %ld\n",
// rtl::OUStringToOString( aIt->GetName(), RTL_TEXTENCODING_UTF8 ).getStr(),
// (long)aIt->GetSize() );
if( aIt->IsStorage() )
{
SotStorageRef xChild( xObjStor->OpenSotStorage( aIt->GetName() ) );
......@@ -123,7 +121,8 @@ namespace
}
bool SotTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
SvFileStream aStream(rURL, STREAM_READ);
SotStorageRef xObjStor = new SotStorage(aStream);
......
......@@ -46,7 +46,9 @@ class SvtoolsFiltersTest
public:
SvtoolsFiltersTest() : BootstrapFixture(true, false) {}
virtual bool load(const rtl::OUString &, const rtl::OUString &rURL, const rtl::OUString &);
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
/**
* Ensure CVEs remain unbroken
......@@ -59,7 +61,8 @@ public:
};
bool SvtoolsFiltersTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &)
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
GraphicFilter aGraphicFilter(false);
SvFileStream aFileStream(rURL, STREAM_READ);
......
......@@ -80,6 +80,7 @@ $(eval $(call gb_CppunitTest_use_components,sw_filters_test,\
forms/util/frm \
framework/util/fwk \
i18npool/util/i18npool \
package/source/xstor/xstor \
package/util/package2 \
sax/source/expatwrap/expwrap \
sfx2/util/sfx \
......@@ -91,6 +92,7 @@ $(eval $(call gb_CppunitTest_use_components,sw_filters_test,\
ucb/source/ucp/file/ucpfile1 \
unoxml/source/service/unoxml \
$(if $(filter DESKTOP,$(BUILD_TYPE)),xmlhelp/util/ucpchelp1) \
xmloff/source/transform/xof \
))
$(eval $(call gb_CppunitTest_use_configuration,sw_filters_test))
......
......@@ -62,7 +62,9 @@ class SwFiltersTest
, public test::BootstrapFixture
{
public:
bool load(const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData);
virtual bool load( const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData, unsigned int nFilterFlags,
unsigned int nClipboardID, unsigned int nFilterVersion);
virtual void setUp();
// Ensure CVEs remain unbroken
......@@ -77,12 +79,14 @@ private:
};
bool SwFiltersTest::load(const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData)
const rtl::OUString &rUserData, unsigned int nFilterFlags,
unsigned int nClipboardID, unsigned int nFilterVersion)
{
SfxFilter* pFilter = new SfxFilter(
rFilter,
rtl::OUString(), 0, 0, rtl::OUString(), 0, rtl::OUString(),
rUserData, rtl::OUString() );
rFilter, rtl::OUString(), nFilterFlags,
nClipboardID, rtl::OUString(), 0, rtl::OUString(),
rUserData, rtl::OUString());
pFilter->SetVersion(nFilterVersion);
SwDocShellRef xDocShRef = new SwDocShell;
SfxMedium* pSrcMed = new SfxMedium(rURL, STREAM_STD_READ);
......@@ -104,7 +108,15 @@ void SwFiltersTest::testCVEs()
{
testDir(rtl::OUString("Staroffice XML (Writer)"),
getURLFromSrc("/sw/qa/core/data/xml/"),
rtl::OUString(FILTER_XML));
rtl::OUString(FILTER_XML),
SFX_FILTER_IMPORT | SFX_FILTER_OWN | SFX_FILTER_DEFAULT,
-1, SOFFICE_FILEFORMAT_CURRENT);
testDir(rtl::OUString("writer8"),
getURLFromSrc("/sw/qa/core/data/odt/"),
rtl::OUString(FILTER_XML),
SFX_FILTER_IMPORT | SFX_FILTER_OWN | SFX_FILTER_DEFAULT,
-1, SOFFICE_FILEFORMAT_CURRENT);
testDir(rtl::OUString("MS Word 97"),
getURLFromSrc("/sw/qa/core/data/ww8/"),
......
......@@ -162,11 +162,11 @@ sal_Int32 ReadThroughComponent(
RTL_LOGFILE_CONTEXT_TRACE( aLog, "parser created" );
// get filter
OUString aFilterName(OUString::createFromAscii(pFilterName));
uno::Reference< xml::sax::XDocumentHandler > xFilter(
rFactory->createInstanceWithArguments(
OUString::createFromAscii(pFilterName), rFilterArguments),
UNO_QUERY );
OSL_ENSURE( xFilter.is(), "Can't instantiate filter component." );
rFactory->createInstanceWithArguments(aFilterName, rFilterArguments),
UNO_QUERY);
SAL_WARN_IF(!xFilter.is(), "sw", "Can't instantiate filter component: " << aFilterName);
if( !xFilter.is() )
return ERR_SWG_READ_ERROR;
RTL_LOGFILE_CONTEXT_TRACE1( aLog, "%s created", pFilterName );
......
......@@ -27,6 +27,7 @@
* instead of those above.
*/
#include <comphelper/documentconstants.hxx>
#include <rtl/ustring.hxx>
#include "unotest/detail/unotestdllapi.hxx"
......@@ -56,21 +57,33 @@ public:
//root dir of test files, must contain pass, fail, indeterminate
const rtl::OUString &rURL,
//additional filter data for SfxFilter
const rtl::OUString &rUserData);
const rtl::OUString &rUserData = rtl::OUString(),
//SfxFilterFlags for SfxFilter
unsigned int nFilterFlags = SFX_FILTER_IMPORT,
//Clipboard id for SfxFilter
unsigned int nClipboardID = 0,
//additional filter version for SfxFilter
unsigned int nFilterVersion = 0);
virtual bool load(
const rtl::OUString &rFilter,
const rtl::OUString &rURL,
const rtl::OUString &rUserData) = 0;
const rtl::OUString &rUserData,
unsigned int nFilterFlags,
unsigned int nClipboardID,
unsigned int nFilterVersion) = 0;
protected:
~FiltersTest() {}
void recursiveScan(
filterStatus nExpected,
const rtl::OUString &rFilter,
const rtl::OUString &rURL,
const rtl::OUString &rUserData,
filterStatus nExpected);
unsigned int nFilterFlags,
unsigned int nClipboardID,
unsigned int nFilterVersion);
};
}
......
......@@ -70,8 +70,10 @@ void decode(const rtl::OUString& rIn, const rtl::OUString &rOut)
rtl_cipher_destroy(cipher);
}
void FiltersTest::recursiveScan(const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData,
filterStatus nExpected)
void FiltersTest::recursiveScan(filterStatus nExpected,
const rtl::OUString &rFilter, const rtl::OUString &rURL,
const rtl::OUString &rUserData, unsigned int nFilterFlags,
unsigned int nClipboardID, unsigned int nFilterVersion)
{
osl::Directory aDir(rURL);
......@@ -83,7 +85,10 @@ void FiltersTest::recursiveScan(const rtl::OUString &rFilter, const rtl::OUStrin
aItem.getFileStatus(aFileStatus);
rtl::OUString sURL = aFileStatus.getFileURL();
if (aFileStatus.getFileType() == osl::FileStatus::Directory)
recursiveScan(rFilter, sURL, rUserData, nExpected);
{
recursiveScan(nExpected, rFilter, sURL, rUserData,
nFilterFlags, nClipboardID, nFilterVersion);
}
else
{
rtl::OUString sTmpFile;
......@@ -121,7 +126,8 @@ void FiltersTest::recursiveScan(const rtl::OUString &rFilter, const rtl::OUStrin
//the hanging input file is visible
fprintf(stderr, "%s,", aRes.getStr());
sal_uInt32 nStartTime = osl_getGlobalTimer();
bool bRes = load(rFilter, sURL, rUserData);
bool bRes = load(rFilter, sURL, rUserData, nFilterFlags,
nClipboardID, nFilterVersion);
sal_uInt32 nEndTime = osl_getGlobalTimer();
if (bEncrypted)
......@@ -137,15 +143,21 @@ void FiltersTest::recursiveScan(const rtl::OUString &rFilter, const rtl::OUStrin
CPPUNIT_ASSERT(osl::FileBase::E_None == aDir.close());
}
void FiltersTest::testDir(const rtl::OUString &rFilter, const rtl::OUString &rURL, const rtl::OUString &rUserData)
void FiltersTest::testDir(const rtl::OUString &rFilter,
const rtl::OUString &rURL, const rtl::OUString &rUserData,
unsigned int nFilterFlags, unsigned int nClipboardID,
unsigned int nFilterVersion)
{
fprintf(stderr, "File tested,Test Result,Execution Time (ms)\n");
recursiveScan(rFilter, rURL + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("pass")),
rUserData, test::pass);
recursiveScan(rFilter, rURL + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("fail")),
rUserData, test::fail);
recursiveScan(rFilter, rURL + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("indeterminate")),
rUserData, test::indeterminate);
recursiveScan(test::pass, rFilter,
rURL + rtl::OUString("pass"),
rUserData, nFilterFlags, nClipboardID, nFilterVersion);
recursiveScan(test::fail, rFilter,
rURL + rtl::OUString("fail"),
rUserData, nFilterFlags, nClipboardID, nFilterVersion);
recursiveScan(test::indeterminate, rFilter,
rURL + rtl::OUString("indeterminate"),
rUserData, nFilterFlags, nClipboardID, nFilterVersion);
}
}
......
......@@ -45,7 +45,10 @@ public:
virtual void setUp();
virtual bool load(const OUString &, const OUString &rURL, const OUString &);
virtual bool load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int);
void test();
CPPUNIT_TEST_SUITE(RtfTest);
......@@ -62,7 +65,9 @@ void RtfTest::setUp()
m_xFilter = uno::Reference< document::XFilter >(m_xSFactory->createInstance("com.sun.star.comp.Writer.RtfFilter"), uno::UNO_QUERY_THROW);
}
bool RtfTest::load(const OUString &, const OUString &rURL, const OUString &)
bool RtfTest::load(const rtl::OUString &,
const rtl::OUString &rURL, const rtl::OUString &,
unsigned int, unsigned int, unsigned int)
{
uno::Sequence< beans::PropertyValue > aDescriptor(1);
aDescriptor[0].Name = "URL";
......
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