tdf#93097 oox: fix import of metadata from non-relative stream paths
Commit ef2668bad9
(PPTX import: fix
missing document metadata, 2014-08-28) implemented metadata import for
the PPTX filter, but in case the metadata stream is not an existing one,
then OHierarchyHolder_Impl::GetListPathFromString() invoked by
OStorage::openStreamElementByHierarchicalName() throws.
The bugdoc is generated by a 3rd-party tool that always starts the
stream path with a slash, and MSO seems to just ignore that: so let's do
the same to be able to open the document.
Change-Id: I6c0715adeb19b9055669f6a45055415dd2c44e28
This commit is contained in:
@@ -80,8 +80,13 @@ Sequence< InputSource > lclGetRelatedStreams( const Reference< XStorage >& rxSto
|
|||||||
const StringPair& rEntry = rEntries[ nEntryIndex ];
|
const StringPair& rEntry = rEntries[ nEntryIndex ];
|
||||||
if ( rEntry.First == "Target" )
|
if ( rEntry.First == "Target" )
|
||||||
{
|
{
|
||||||
|
// The stream path is always a relative one, ignore the leading "/" if it's there.
|
||||||
|
OUString aStreamPath = rEntry.Second;
|
||||||
|
if (aStreamPath.startsWith("/"))
|
||||||
|
aStreamPath = aStreamPath.copy(1);
|
||||||
|
|
||||||
Reference< XExtendedStorageStream > xExtStream(
|
Reference< XExtendedStorageStream > xExtStream(
|
||||||
xHierarchy->openStreamElementByHierarchicalName( rEntry.Second, ElementModes::READ ), UNO_QUERY_THROW );
|
xHierarchy->openStreamElementByHierarchicalName( aStreamPath, ElementModes::READ ), UNO_QUERY_THROW );
|
||||||
Reference< XInputStream > xInStream = xExtStream->getInputStream();
|
Reference< XInputStream > xInStream = xExtStream->getInputStream();
|
||||||
if( xInStream.is() )
|
if( xInStream.is() )
|
||||||
{
|
{
|
||||||
|
BIN
sd/qa/unit/data/pptx/tdf93097.pptx
Normal file
BIN
sd/qa/unit/data/pptx/tdf93097.pptx
Normal file
Binary file not shown.
@@ -104,6 +104,7 @@ public:
|
|||||||
void testBnc910045();
|
void testBnc910045();
|
||||||
void testRowHeight();
|
void testRowHeight();
|
||||||
void testTdf93830();
|
void testTdf93830();
|
||||||
|
void testTdf93097();
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE(SdImportTest);
|
CPPUNIT_TEST_SUITE(SdImportTest);
|
||||||
|
|
||||||
@@ -144,6 +145,7 @@ public:
|
|||||||
CPPUNIT_TEST(testBnc910045);
|
CPPUNIT_TEST(testBnc910045);
|
||||||
CPPUNIT_TEST(testRowHeight);
|
CPPUNIT_TEST(testRowHeight);
|
||||||
CPPUNIT_TEST(testTdf93830);
|
CPPUNIT_TEST(testTdf93830);
|
||||||
|
CPPUNIT_TEST(testTdf93097);
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
};
|
};
|
||||||
@@ -1224,6 +1226,16 @@ void SdImportTest::testTdf93830()
|
|||||||
xDocShRef->DoClose();
|
xDocShRef->DoClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SdImportTest::testTdf93097()
|
||||||
|
{
|
||||||
|
// Throwing metadata import aborted the filter, check that metadata is now imported.
|
||||||
|
sd::DrawDocShellRef xDocShRef = loadURL(getURLFromSrc("/sd/qa/unit/data/pptx/tdf93097.pptx"), PPTX);
|
||||||
|
uno::Reference<document::XDocumentPropertiesSupplier> xDocumentPropertiesSupplier(xDocShRef->GetModel(), uno::UNO_QUERY);
|
||||||
|
uno::Reference<document::XDocumentProperties> xDocumentProperties = xDocumentPropertiesSupplier->getDocumentProperties();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(OUString("ss"), xDocumentProperties->getTitle());
|
||||||
|
xDocShRef->DoClose();
|
||||||
|
}
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
|
CPPUNIT_TEST_SUITE_REGISTRATION(SdImportTest);
|
||||||
|
|
||||||
CPPUNIT_PLUGIN_IMPLEMENT();
|
CPPUNIT_PLUGIN_IMPLEMENT();
|
||||||
|
Reference in New Issue
Block a user