xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx | 2 xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx | 52 ++++++++++------ 2 files changed, 37 insertions(+), 17 deletions(-)
New commits: commit 8f2f125802f5932ed3be598a768267ebcd413e49 Author: Miklos Vajna <[email protected]> Date: Thu Feb 4 16:59:53 2016 +0100 xmlsecurity: don't write the stream of an OOXML storage We'll need individual streams instead for OOXML. Change-Id: Ia3a7172af39ebfb815d44b645b217da15e41c197 diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx index be0b412..6601bbe 100644 --- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx @@ -492,22 +492,26 @@ IMPL_LINK_NOARG_TYPED(DigitalSignaturesDialog, AddButtonHdl, Button*, void) //a sax writer are used to write the information. SignatureStreamHelper aStreamHelper = ImplOpenSignatureStream( css::embed::ElementModes::WRITE|css::embed::ElementModes::TRUNCATE, true); - Reference< css::io::XOutputStream > xOutputStream( - aStreamHelper.xSignatureStream, UNO_QUERY_THROW); - Reference< css::xml::sax::XWriter> xSaxWriter = - maSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream ); - // Export old signatures... - 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]); - - // Create a new one... - maSignatureHelper.CreateAndWriteSignature( xDocumentHandler ); - - // That's it... - XMLSignatureHelper::CloseDocumentHandler( xDocumentHandler); + if (aStreamHelper.nStorageFormat != embed::StorageFormats::OFOPXML) + { + Reference< css::io::XOutputStream > xOutputStream( + aStreamHelper.xSignatureStream, UNO_QUERY_THROW); + Reference< css::xml::sax::XWriter> xSaxWriter = + maSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream ); + + // Export old signatures... + 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]); + + // Create a new one... + maSignatureHelper.CreateAndWriteSignature( xDocumentHandler ); + + // That's it... + XMLSignatureHelper::CloseDocumentHandler( xDocumentHandler); + } maSignatureHelper.EndMission(); commit f065747552379bc3bf56fd479a04fd3de1ef72b7 Author: Miklos Vajna <[email protected]> Date: Thu Feb 4 15:24:20 2016 +0100 xmlsecurity: support tmp storage instead of tmp stream for OOXML First step towards having a working export, since OOXML uses one stream / signature, so we need a storage for all signatures, not just a stream. Change-Id: Id5edfd3ce7e8e4177b0071badc6eb4330a525281 diff --git a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx index ff8b66e..4a97049 100644 --- a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx +++ b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx @@ -57,6 +57,8 @@ private: css::uno::Reference < css::embed::XStorage > mxStore; css::uno::Reference < css::io::XStream > mxSignatureStream; css::uno::Reference < css::io::XStream > mxTempSignatureStream; + /// Storage containing all OOXML signatures, unused for ODF. + css::uno::Reference<css::embed::XStorage> mxTempSignatureStorage; SignatureInformations maCurrentSignatureInformations; bool mbVerifySignatures; bool mbSignaturesChanged; diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx index 212dbe7..be0b412 100644 --- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx +++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx @@ -57,6 +57,7 @@ #include <vcl/layout.hxx> #include <unotools/configitem.hxx> +#include <comphelper/storagehelper.hxx> using namespace css::security; using namespace css::uno; @@ -796,13 +797,26 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream( sal_Int32 nStreamOpenMode, bool bTempStream) { SignatureStreamHelper aHelper; + if (mxStore.is()) + { + uno::Reference<container::XNameAccess> xNameAccess(mxStore, uno::UNO_QUERY); + if (xNameAccess.is() && xNameAccess->hasByName("[Content_Types].xml")) + aHelper.nStorageFormat = embed::StorageFormats::OFOPXML; + } + if (bTempStream) { if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE) { //We write always into a new temporary stream. mxTempSignatureStream.set(css::io::TempFile::create(mxCtx), UNO_QUERY_THROW); - aHelper.xSignatureStream = mxTempSignatureStream; + if (aHelper.nStorageFormat != embed::StorageFormats::OFOPXML) + aHelper.xSignatureStream = mxTempSignatureStream; + else + { + mxTempSignatureStorage = comphelper::OStorageHelper::GetStorageOfFormatFromStream(ZIP_STORAGE_FORMAT_STRING, mxTempSignatureStream); + aHelper.xSignatureStorage = mxTempSignatureStorage; + } } else { @@ -833,7 +847,7 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream( if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE) { - if (aHelper.xSignatureStream.is()) + if (aHelper.xSignatureStream.is() && aHelper.nStorageFormat != embed::StorageFormats::OFOPXML) { css::uno::Reference < css::io::XTruncate > xTruncate( aHelper.xSignatureStream, UNO_QUERY_THROW); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
