[Libreoffice-commits] core.git: 3 commits - extensions/source oox/source sw/source
Caolán McNamara
caolanm at redhat.com
Sun Jan 10 08:37:36 PST 2016
extensions/source/abpilot/unodialogabp.hxx | 2
oox/source/export/shapes.cxx | 246 ++++++++++++++-------------
sw/source/core/ole/ndole.cxx | 11 -
sw/source/filter/ww8/docxattributeoutput.cxx | 11 -
4 files changed, 144 insertions(+), 126 deletions(-)
New commits:
commit 680abab7710b7e8e6f2ba9cee37a5ccd224e2993
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sun Jan 10 16:24:27 2016 +0000
crashtesting: don't fail on export of fdo65321-3.ods to xlsx
with broken ole object
Change-Id: I8dc9e1035893d5cb931d13eafcc3e3ec1c9c00d4
diff --git a/oox/source/export/shapes.cxx b/oox/source/export/shapes.cxx
index 9fcff75..95d1d77 100644
--- a/oox/source/export/shapes.cxx
+++ b/oox/source/export/shapes.cxx
@@ -1586,14 +1586,18 @@ ShapeExport& ShapeExport::WriteOLE2Shape( Reference< XShape > xShape )
if (!xPropSet.is())
return *this;
+ bool bIsChart(false);
OUString clsid;
xPropSet->getPropertyValue("CLSID") >>= clsid;
- assert(!clsid.isEmpty());
- SvGlobalName aClassID;
- bool const isValid(aClassID.MakeId(clsid));
- assert(isValid); (void)isValid;
+ if (!clsid.isEmpty())
+ {
+ SvGlobalName aClassID;
+ bool const isValid = aClassID.MakeId(clsid);
+ assert(isValid); (void)isValid;
+ bIsChart = SotExchange::IsChart(aClassID);
+ }
- if (SotExchange::IsChart(aClassID))
+ if (bIsChart)
{
Reference< XChartDocument > xChartDoc;
xPropSet->getPropertyValue("Model") >>= xChartDoc;
@@ -1603,154 +1607,160 @@ ShapeExport& ShapeExport::WriteOLE2Shape( Reference< XShape > xShape )
ChartExport aChartExport( mnXmlNamespace, GetFS(), xModel, GetFB(), GetDocumentType() );
static sal_Int32 nChartCount = 0;
aChartExport.WriteChartObj( xShape, ++nChartCount );
+ return *this;
}
- else
+
+ uno::Reference<embed::XEmbeddedObject> const xObj(
+ xPropSet->getPropertyValue("EmbeddedObject"), uno::UNO_QUERY);
+
+ if (!xObj.is())
{
- uno::Reference<embed::XEmbeddedObject> const xObj(
- xPropSet->getPropertyValue("EmbeddedObject"), uno::UNO_QUERY);
+ SAL_WARN("oox", "ShapeExport::WriteOLE2Shape: no object");
+ return *this;
+ }
- uno::Reference<beans::XPropertySet> const xParent(
- uno::Reference<container::XChild>(xObj, uno::UNO_QUERY)->getParent(),
- uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> const xParent(
+ uno::Reference<container::XChild>(xObj, uno::UNO_QUERY)->getParent(),
+ uno::UNO_QUERY);
- uno::Sequence<beans::PropertyValue> grabBag;
- xParent->getPropertyValue("InteropGrabBag") >>= grabBag;
+ uno::Sequence<beans::PropertyValue> grabBag;
+ xParent->getPropertyValue("InteropGrabBag") >>= grabBag;
- OUString const entryName(
- uno::Reference<embed::XEmbedPersist>(xObj, uno::UNO_QUERY)->getEntryName());
- OUString progID;
+ OUString const entryName(
+ uno::Reference<embed::XEmbedPersist>(xObj, uno::UNO_QUERY)->getEntryName());
+ OUString progID;
- for (auto const& it : grabBag)
+ for (auto const& it : grabBag)
+ {
+ if (it.Name == "EmbeddedObjects")
{
- if (it.Name == "EmbeddedObjects")
+ uno::Sequence<beans::PropertyValue> objects;
+ it.Value >>= objects;
+ for (auto const& object : objects)
{
- uno::Sequence<beans::PropertyValue> objects;
- it.Value >>= objects;
- for (auto const& object : objects)
+ if (object.Name == entryName)
{
- if (object.Name == entryName)
+ uno::Sequence<beans::PropertyValue> props;
+ object.Value >>= props;
+ for (auto const& prop : props)
{
- uno::Sequence<beans::PropertyValue> props;
- object.Value >>= props;
- for (auto const& prop : props)
+ if (prop.Name == "ProgID")
{
- if (prop.Name == "ProgID")
- {
- prop.Value >>= progID;
- break;
- }
+ prop.Value >>= progID;
+ break;
}
- break;
}
+ break;
}
- break;
}
+ break;
}
+ }
- OUString sMediaType;
- OUString sRelationType;
- OUString sSuffix;
- const char * pProgID(nullptr);
+ OUString sMediaType;
+ OUString sRelationType;
+ OUString sSuffix;
+ const char * pProgID(nullptr);
- uno::Reference<io::XInputStream> const xInStream =
- oox::GetOLEObjectStream(
- mpFB->getComponentContext(), xObj, progID,
- sMediaType, sRelationType, sSuffix, pProgID);
+ uno::Reference<io::XInputStream> const xInStream =
+ oox::GetOLEObjectStream(
+ mpFB->getComponentContext(), xObj, progID,
+ sMediaType, sRelationType, sSuffix, pProgID);
- if (!xInStream.is())
- {
- return *this;
- }
+ if (!xInStream.is())
+ {
+ return *this;
+ }
- OString anotherProgID;
- if (!pProgID && !progID.isEmpty())
- {
- anotherProgID = OUStringToOString(progID, RTL_TEXTENCODING_UTF8);
- pProgID = anotherProgID.getStr();
- }
+ OString anotherProgID;
+ if (!pProgID && !progID.isEmpty())
+ {
+ anotherProgID = OUStringToOString(progID, RTL_TEXTENCODING_UTF8);
+ pProgID = anotherProgID.getStr();
+ }
- assert(!sMediaType.isEmpty());
- assert(!sRelationType.isEmpty());
- assert(!sSuffix.isEmpty());
-
- OUString sFileName = "embeddings/oleObject" + OUString::number(mnEmbeddeDocumentCounter++) + "." + sSuffix;
- uno::Reference<io::XOutputStream> const xOutStream(
- mpFB->openFragmentStream(
- OUString::createFromAscii(GetComponentDir()) + "/" + sFileName,
- sMediaType));
- assert(xOutStream.is()); // no reason why that could fail
-
- try {
- ::comphelper::OStorageHelper::CopyInputToOutput(xInStream, xOutStream);
- } catch (uno::Exception const& e) {
- SAL_WARN("oox", "ShapeExport::WriteOLEObject: exception: " << e.Message);
- }
+ assert(!sMediaType.isEmpty());
+ assert(!sRelationType.isEmpty());
+ assert(!sSuffix.isEmpty());
+
+ OUString sFileName = "embeddings/oleObject" + OUString::number(mnEmbeddeDocumentCounter++) + "." + sSuffix;
+ uno::Reference<io::XOutputStream> const xOutStream(
+ mpFB->openFragmentStream(
+ OUString::createFromAscii(GetComponentDir()) + "/" + sFileName,
+ sMediaType));
+ assert(xOutStream.is()); // no reason why that could fail
+
+ try {
+ ::comphelper::OStorageHelper::CopyInputToOutput(xInStream, xOutStream);
+ } catch (uno::Exception const& e) {
+ SAL_WARN("oox", "ShapeExport::WriteOLEObject: exception: " << e.Message);
+ }
- OUString const sRelId = mpFB->addRelation(
- mpFS->getOutputStream(), sRelationType,
- OUString::createFromAscii(GetRelationCompPrefix()) + sFileName);
+ OUString const sRelId = mpFB->addRelation(
+ mpFS->getOutputStream(), sRelationType,
+ OUString::createFromAscii(GetRelationCompPrefix()) + sFileName);
- mpFS->startElementNS( mnXmlNamespace, XML_graphicFrame, FSEND );
+ mpFS->startElementNS( mnXmlNamespace, XML_graphicFrame, FSEND );
- mpFS->startElementNS( mnXmlNamespace, XML_nvGraphicFramePr, FSEND );
+ mpFS->startElementNS( mnXmlNamespace, XML_nvGraphicFramePr, FSEND );
- mpFS->singleElementNS( mnXmlNamespace, XML_cNvPr,
- XML_id, I32S( GetNewShapeID( xShape ) ),
- XML_name, IDS(Object),
- FSEND );
+ mpFS->singleElementNS( mnXmlNamespace, XML_cNvPr,
+ XML_id, I32S( GetNewShapeID( xShape ) ),
+ XML_name, IDS(Object),
+ FSEND );
- mpFS->singleElementNS( mnXmlNamespace, XML_cNvGraphicFramePr,
- FSEND );
+ mpFS->singleElementNS( mnXmlNamespace, XML_cNvGraphicFramePr,
+ FSEND );
- if (GetDocumentType() == DOCUMENT_PPTX)
- mpFS->singleElementNS( mnXmlNamespace, XML_nvPr,
- FSEND );
- mpFS->endElementNS( mnXmlNamespace, XML_nvGraphicFramePr );
+ if (GetDocumentType() == DOCUMENT_PPTX)
+ mpFS->singleElementNS( mnXmlNamespace, XML_nvPr,
+ FSEND );
+ mpFS->endElementNS( mnXmlNamespace, XML_nvGraphicFramePr );
- WriteShapeTransformation( xShape, mnXmlNamespace );
+ WriteShapeTransformation( xShape, mnXmlNamespace );
- mpFS->startElementNS( XML_a, XML_graphic, FSEND );
- mpFS->startElementNS( XML_a, XML_graphicData,
- XML_uri, "http://schemas.openxmlformats.org/presentationml/2006/ole",
- FSEND );
- if (pProgID)
- {
- mpFS->startElementNS( mnXmlNamespace, XML_oleObj,
- XML_progId, pProgID,
- FSNS(XML_r, XML_id), USS( sRelId ),
- XML_spid, "",
- FSEND );
- }
- else
- {
- mpFS->startElementNS( mnXmlNamespace, XML_oleObj,
+ mpFS->startElementNS( XML_a, XML_graphic, FSEND );
+ mpFS->startElementNS( XML_a, XML_graphicData,
+ XML_uri, "http://schemas.openxmlformats.org/presentationml/2006/ole",
+ FSEND );
+ if (pProgID)
+ {
+ mpFS->startElementNS( mnXmlNamespace, XML_oleObj,
+ XML_progId, pProgID,
+ FSNS(XML_r, XML_id), USS( sRelId ),
+ XML_spid, "",
+ FSEND );
+ }
+ else
+ {
+ mpFS->startElementNS( mnXmlNamespace, XML_oleObj,
//? XML_name, "Document",
- FSNS(XML_r, XML_id), USS( sRelId ),
- // The spec says that this is a required attribute, but PowerPoint can only handle an empty value.
- XML_spid, "",
- FSEND );
- }
+ FSNS(XML_r, XML_id), USS( sRelId ),
+ // The spec says that this is a required attribute, but PowerPoint can only handle an empty value.
+ XML_spid, "",
+ FSEND );
+ }
- mpFS->singleElementNS( mnXmlNamespace, XML_embed, FSEND );
+ mpFS->singleElementNS( mnXmlNamespace, XML_embed, FSEND );
- // pic element
- SdrObject* pSdrOLE2( GetSdrObjectFromXShape( xShape ) );
- // The spec doesn't allow <p:pic> here, but PowerPoint requires it.
- bool bEcma = mpFB->getVersion() == oox::core::ECMA_DIALECT;
- if (pSdrOLE2 && dynamic_cast<const SdrOle2Obj*>( pSdrOLE2) != nullptr && bEcma)
- {
- const Graphic* pGraphic = static_cast<SdrOle2Obj*>(pSdrOLE2)->GetGraphic();
- if (pGraphic)
- WriteGraphicObjectShapePart( xShape, pGraphic );
- }
+ // pic element
+ SdrObject* pSdrOLE2( GetSdrObjectFromXShape( xShape ) );
+ // The spec doesn't allow <p:pic> here, but PowerPoint requires it.
+ bool bEcma = mpFB->getVersion() == oox::core::ECMA_DIALECT;
+ if (pSdrOLE2 && dynamic_cast<const SdrOle2Obj*>( pSdrOLE2) != nullptr && bEcma)
+ {
+ const Graphic* pGraphic = static_cast<SdrOle2Obj*>(pSdrOLE2)->GetGraphic();
+ if (pGraphic)
+ WriteGraphicObjectShapePart( xShape, pGraphic );
+ }
+
+ mpFS->endElementNS( mnXmlNamespace, XML_oleObj );
- mpFS->endElementNS( mnXmlNamespace, XML_oleObj );
+ mpFS->endElementNS( XML_a, XML_graphicData );
+ mpFS->endElementNS( XML_a, XML_graphic );
- mpFS->endElementNS( XML_a, XML_graphicData );
- mpFS->endElementNS( XML_a, XML_graphic );
+ mpFS->endElementNS( mnXmlNamespace, XML_graphicFrame );
- mpFS->endElementNS( mnXmlNamespace, XML_graphicFrame );
- }
return *this;
}
commit e634cd9f4f681bcf8401576b5d4ee4ca8fb2eec5
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sun Jan 10 16:14:41 2016 +0000
crashtesting: fix assert on re-export of ooo74510-1.odt to docx
Change-Id: Id66ab14772b002b140ba6bbfd098c19aeb1a537f
diff --git a/sw/source/core/ole/ndole.cxx b/sw/source/core/ole/ndole.cxx
index b9049d7..99b3f77 100644
--- a/sw/source/core/ole/ndole.cxx
+++ b/sw/source/core/ole/ndole.cxx
@@ -192,7 +192,7 @@ SwEmbedObjectLink::~SwEmbedObjectLink()
xObject->changeState( nState );
}
}
- catch ( uno::Exception& )
+ catch (const uno::Exception&)
{
}
}
@@ -357,7 +357,7 @@ bool SwOLENode::SavePersistentData()
// "unload" object
aOLEObj.xOLERef->changeState( embed::EmbedStates::LOADED );
}
- catch ( uno::Exception& )
+ catch (const uno::Exception&)
{
}
}
@@ -549,8 +549,9 @@ bool SwOLENode::UpdateLinkURL_Impl()
if ( nCurState != embed::EmbedStates::LOADED )
xObj->changeState( nCurState );
}
- catch( uno::Exception& )
- {}
+ catch (const uno::Exception&)
+ {
+ }
}
if ( !bResult )
@@ -873,7 +874,7 @@ bool SwOLEObj::UnloadObject( uno::Reference< embed::XEmbeddedObject > xObj, cons
// setting object to loaded state will remove it from cache
xObj->changeState( embed::EmbedStates::LOADED );
}
- catch ( uno::Exception& )
+ catch (const uno::Exception&)
{
bRet = false;
}
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 7958bf7..e8b5055 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -4522,8 +4522,15 @@ void DocxAttributeOutput::WritePostponedMath(const SwOLENode* pPostponedMath)
{
uno::Reference < embed::XEmbeddedObject > xObj(const_cast<SwOLENode*>(pPostponedMath)->GetOLEObj().GetOleRef());
if (embed::EmbedStates::LOADED == xObj->getCurrentState())
- { // must be running so there is a Component
- xObj->changeState(embed::EmbedStates::RUNNING);
+ {
+ // must be running so there is a Component
+ try
+ {
+ xObj->changeState(embed::EmbedStates::RUNNING);
+ }
+ catch (const uno::Exception&)
+ {
+ }
}
uno::Reference< uno::XInterface > xInterface( xObj->getComponent(), uno::UNO_QUERY );
if (!xInterface.is())
commit 4e4554f1a674da89f752fe07d557b759b69cf2c9
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sun Jan 10 15:39:46 2016 +0000
cppcheck: noExplicitConstructor
Change-Id: I62f1260d75d8a79bd230e2813fc58373aa83b6ab
diff --git a/extensions/source/abpilot/unodialogabp.hxx b/extensions/source/abpilot/unodialogabp.hxx
index a5145e1..7d5800d 100644
--- a/extensions/source/abpilot/unodialogabp.hxx
+++ b/extensions/source/abpilot/unodialogabp.hxx
@@ -41,7 +41,7 @@ namespace abp
OUString m_sDataSourceName;
public:
- OABSPilotUno(const css::uno::Reference< css::uno::XComponentContext >& _rxORB);
+ explicit OABSPilotUno(const css::uno::Reference< css::uno::XComponentContext >& _rxORB);
private:
// XInterface (disambiguation)
More information about the Libreoffice-commits
mailing list