summaryrefslogtreecommitdiff
path: root/xmlsecurity
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2016-02-04 09:29:00 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-02-04 10:02:36 +0100
commitc0870b2a15cde89d9f64803828bbfbf458eed918 (patch)
tree978dc4ed397a1ec2f5b69d73b7d62588bfa80dff /xmlsecurity
parente2a6b1378f04e6349eae678028022dd48e6959de (diff)
xmlsecurity: fix crash on closing DigitalSignaturesDialog without ...
... a signature stream. ODF has a signature stream, OOXML has a signature storage instead. Code tries to export all signatures on closing the dialog, but OOXML at the moment has only an importer; so just fail gracefully in case we only have a storage, not a stream. With this, closing the dialog no longer results in a crash for OOXML documents. Change-Id: I3e6580ddb20ec31fb0c5a4abe1fab3d8046d0ee5
Diffstat (limited to 'xmlsecurity')
-rw-r--r--xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx50
1 files changed, 29 insertions, 21 deletions
diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index ea2430b8d7df..212dbe766883 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -393,25 +393,30 @@ IMPL_LINK_NOARG_TYPED(DigitalSignaturesDialog, OKButtonHdl, Button*, void)
// Export all other signatures...
SignatureStreamHelper aStreamHelper = ImplOpenSignatureStream(
embed::ElementModes::WRITE|embed::ElementModes::TRUNCATE, false );
- uno::Reference< io::XOutputStream > xOutputStream(
- aStreamHelper.xSignatureStream, uno::UNO_QUERY );
- uno::Reference< com::sun::star::xml::sax::XWriter> xSaxWriter =
- maSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream );
- uno::Reference< xml::sax::XDocumentHandler> xDocumentHandler(xSaxWriter, UNO_QUERY_THROW);
- size_t nInfos = maCurrentSignatureInformations.size();
- for( size_t n = 0 ; n < nInfos ; ++n )
- XMLSignatureHelper::ExportSignature(
- xDocumentHandler, maCurrentSignatureInformations[ n ] );
-
- XMLSignatureHelper::CloseDocumentHandler( xDocumentHandler);
-
- // If stream was not provided, we are responsible for committing it....
- if ( !mxSignatureStream.is() )
+ if (aStreamHelper.xSignatureStream.is())
{
- uno::Reference< embed::XTransactedObject > xTrans(
- aStreamHelper.xSignatureStorage, uno::UNO_QUERY );
- xTrans->commit();
+ // ODF
+ uno::Reference< io::XOutputStream > xOutputStream(
+ aStreamHelper.xSignatureStream, uno::UNO_QUERY );
+ uno::Reference< com::sun::star::xml::sax::XWriter> xSaxWriter =
+ maSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream );
+
+ uno::Reference< xml::sax::XDocumentHandler> xDocumentHandler(xSaxWriter, UNO_QUERY_THROW);
+ size_t nInfos = maCurrentSignatureInformations.size();
+ for( size_t n = 0 ; n < nInfos ; ++n )
+ XMLSignatureHelper::ExportSignature(
+ xDocumentHandler, maCurrentSignatureInformations[ n ] );
+
+ XMLSignatureHelper::CloseDocumentHandler( xDocumentHandler);
+
+ // If stream was not provided, we are responsible for committing it....
+ if ( !mxSignatureStream.is() )
+ {
+ uno::Reference< embed::XTransactedObject > xTrans(
+ aStreamHelper.xSignatureStorage, uno::UNO_QUERY );
+ xTrans->commit();
+ }
}
EndDialog(RET_OK);
@@ -828,10 +833,13 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream(
if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE)
{
- css::uno::Reference < css::io::XTruncate > xTruncate(
- aHelper.xSignatureStream, UNO_QUERY_THROW);
- DBG_ASSERT( xTruncate.is(), "ImplOpenSignatureStream - Stream does not support xTruncate!" );
- xTruncate->truncate();
+ if (aHelper.xSignatureStream.is())
+ {
+ css::uno::Reference < css::io::XTruncate > xTruncate(
+ aHelper.xSignatureStream, UNO_QUERY_THROW);
+ DBG_ASSERT( xTruncate.is(), "ImplOpenSignatureStream - Stream does not support xTruncate!" );
+ xTruncate->truncate();
+ }
}
else if ( bTempStream || mxSignatureStream.is())
{